月数を含むフィールドの正規表現を作成しようとしていますが、もちろん、これは 1 ~ 12 の数字のみである必要があります。ただし、正規表現は初めてなので、これは私にとって少し新しいことであり、自分が正しいことを確認する必要があります。それは問題なく動作するようです。ここでの範囲は 1 ~ 12 で、この範囲内の任意の数値が許可されると仮定するのは正しいですか?
[1-12]{1,2}
これでいいかもしれません。2桁または1桁
1[0-2]|[1-9]
編集: 55 のような数値が心配な場合は、次のように使用します。
^(1[0-2]|[1-9])$
and を追加する^
と$
、文字列の開始と終了を意味します。優れた学習ツールとしてhttps://regex101.comを使用してください。
単なる正規表現ではありません。ただしないでください。文字列を に解析し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
) を使用しないでください。
別の提案:
\b(?:1[0-2]|[1-9])\b
完全一致のみを許可する場合は単語の境界をチェックする必要がない可能性がありますが、それ以外の場合は正規表現を許可します。前の回答では、たとえば 1 と 3 in 13 は 2 つの別個の一致として一致します。
/(1[0-2]|[1-9])/
他の人が言っているように、おそらくもっと良い方法があります。整数として評価されたときに値が < 1 または > 12 であるかどうかを確認するだけでも機能します (正規表現に慣れていない人にとっては理解しやすいでしょう)。(編集:MДΓΓБДLLの答えのように。)
これが私がすることです:
[1-9]|10|11|12