値が与えられたら、それを検証して、それが有効な年であるかどうかを確認したいと思います。4
私の基準は単純で、値は文字を含む整数でなければなりません。私はこれが最善の解決策ではないことを知っています。何年も前1000
には許可されず、などの年も許可されるから5000
です。この基準は、私の現在のシナリオには適切です。
私が思いついたのは
\d{4}$
これは機能しますが、負の値も許可されます。
正の整数のみが許可されるようにするにはどうすればよいですか?
値が与えられたら、それを検証して、それが有効な年であるかどうかを確認したいと思います。4
私の基準は単純で、値は文字を含む整数でなければなりません。私はこれが最善の解決策ではないことを知っています。何年も前1000
には許可されず、などの年も許可されるから5000
です。この基準は、私の現在のシナリオには適切です。
私が思いついたのは
\d{4}$
これは機能しますが、負の値も許可されます。
正の整数のみが許可されるようにするにはどうすればよいですか?
1000年から2999年
^[12][0-9]{3}$
1900〜2099年
^(19|20)\d{2}$
次のように開始アンカーを追加する必要があります^
。
^\d{4}$
正規表現は、4桁で終わる\d{4}$
文字列と一致します。そのため、likeの入力が受け入れられます。-1234
開始アンカーを追加すると、4桁で開始および終了する文字列のみが一致します。つまり、4桁のみが含まれている必要があります。
この質問に対する「受け入れられた」答えは、正しくなく、近視眼的です。
0001
有効な年ではない のような文字列に一致するという点で、これは正しくありません。
9999 を超える値には一致しないという点で近視眼的です。2000 年の教訓はもう忘れてしまったのでしょうか。代わりに、次の正規表現を使用します。
^[1-9]\d{3,}$
将来の年に加えて、過去の年も照合する必要がある場合は、次の正規表現を使用して任意の正の整数と照合できます。
^[1-9]\d*$
過去の日付を期待していない場合でも、誰かがタイム マシンを発明し、あなたのソフトウェアを持ち帰ろうとする場合に備えて、とにかくこの正規表現を使用することをお勧めします。
注: 通常、この正規表現は、1 年より前の年を含むすべての年に一致します。これは、これらの年は通常、負の整数ではなく BC 指定で表されるためです。もちろん、この規則は次の数千年で変更される可能性があるため、次の正規表現を使用して、正または負の任意の整数に一致させることをお勧めします。
^-?[1-9]\d*$
@ r92の回答に基づいて、1970年から2019年まで:
(19[789]\d|20[01]\d)
理論的には、4 桁のオプションが正しいです。しかし、実際には 1900 ~ 2099 の範囲を使用する方がよい場合があります。
さらに、非キャプチャ グループである必要があります。多くのコメントと回答は、適切な IMHO ではないグループ化をキャプチャすることを提案しています。一致する場合は機能する可能性がありますが、正規表現を使用して一致を抽出する場合は、括弧のために 4 桁の数字と 2 桁 (19 と 20) の数字が抽出されます。
これは、非キャプチャ グループを使用した完全一致で機能します。
(?:19|20)\d{2}
[ ^-]\d{4}$
:マイナス記号-
が4桁の前になるのを防ぎます。withを
使用して、文字列の先頭をキャッチすることもできます。それは実際にはあなたのシナリオに依存します...^\d{4}$
^
Javaでこの正規表現を使用します^(0[1-9]|1[012])[/](0[1-9]|[12][0-9]|3[01])[/](19|[2-9][0-9])[0-9]{2}$
1900年から9999年までの作品
これも使えます。
([0-2][0-9]|3[0-1])\/([0-1][0-2])\/(19[789]\d|20[01]\d)
整数を文字列に変換できます。マイナス記号は数字と一致しないため、マイナスの年はありません。