4

月数を含むフィールドの正規表現を作成しようとしていますが、もちろん、これは 1 ~ 12 の数字のみである必要があります。ただし、正規表現は初めてなので、これは私にとって少し新しいことであり、自分が正しいことを確認する必要があります。それは問題なく動作するようです。ここでの範囲は 1 ~ 12 で、この範囲内の任意の数値が許可されると仮定するのは正しいですか?

[1-12]{1,2}
4

7 に答える 7

16

これでいいかもしれません。2桁または1桁

1[0-2]|[1-9]

編集: 55 のような数値が心配な場合は、次のように使用します。

^(1[0-2]|[1-9])$

and を追加する^$、文字列の開始と終了を意味します。優れた学習ツールとしてhttps://regex101.comを使用してください。

于 2012-04-21T15:17:40.233 に答える
10

単なる正規表現ではありません。ただしないでください。文字列を に解析しint、値が範囲内であることを確認します。

boolean isMonthInRange(String monthInput)
{
    try
    {
        int value = Integer.parseInt(monthInput, 10);
        return value >= 1 && value <= 12;
    }
    catch (NumberFormatException e)
    {
        return false;
    }
}

これは Java であるため、カスタム ソリューションを展開する代わりに、この問題に対処できるライブラリが山ほどあります。少なくとも、条件にマジック ナンバー (1および12) を使用しないでください。

于 2012-04-21T15:20:37.190 に答える
5

別の提案:

\b(?:1[0-2]|[1-9])\b

完全一致のみを許可する場合は単語の境界をチェックする必要がない可能性がありますが、それ以外の場合は正規表現を許可します。前の回答では、たとえば 1 と 3 in 13 は 2 つの別個の一致として一致します。

于 2012-04-21T16:31:44.317 に答える
1
/(1[0-2]|[1-9])/

他の人が言っているように、おそらくもっと良い方法があります。整数として評価されたときに値が < 1 または > 12 であるかどうかを確認するだけでも機能します (正規表現に慣れていない人にとっては理解しやすいでしょう)。(編集:MДΓΓБДLLの答えのように。)

于 2012-04-21T15:21:09.343 に答える
0

これが私がすることです:

[1-9]|10|11|12
于 2012-04-21T15:14:24.853 に答える