99

値が与えられたら、それを検証して、それが有効な年であるかどうかを確認したいと思います。4私の基準は単純で、値は文字を含む整数でなければなりません。私はこれが最善の解決策ではないことを知っています。何年も前1000には許可されず、などの年も許可されるから5000です。この基準は、私の現在のシナリオには適切です。

私が思いついたのは

\d{4}$

これは機能しますが、負の値も許可されます。

正の整数のみが許可されるようにするにはどうすればよいですか?

4

16 に答える 16

197

1000年から2999年

^[12][0-9]{3}$

1900〜2099年

^(19|20)\d{2}$
于 2010-12-07T07:18:27.137 に答える
88

次のように開始アンカーを追加する必要があります^

^\d{4}$

正規表現は、4桁で終わる\d{4}$文字列と一致します。そのため、likeの入力が受け入れられます。-1234

開始アンカーを追加すると、4桁で開始および終了する文字列のみが一致します。つまり、4桁のみが含まれている必要があります。

于 2010-12-07T07:15:29.930 に答える
22

この質問に対する「受け入れられた」答えは、正しくなく、近視眼的です。

0001有効な年ではない のような文字列に一致するという点で、これは正しくありません。

9999 を超える値には一致しないという点で近視眼的です。2000 年教訓はもう忘れてしまったのでしょうか。代わりに、次の正規表現を使用します。

^[1-9]\d{3,}$

将来の年に加えて、過去の年も照合する必要がある場合は、次の正規表現を使用して任意の正の整数と照合できます。

^[1-9]\d*$

過去の日付を期待していない場合でも、誰かがタイム マシンを発明し、あなたのソフトウェアを持ち帰ろうとする場合に備えて、とにかくこの正規表現を使用することをお勧めします。

注: 通常、この正規表現は、1 年より前の年を含むすべての年に一致します。これは、これらの年は通常、負の整数ではなく BC 指定で表されるためです。もちろん、この規則は次の数千年で変更される可能性があるため、次の正規表現を使用して、正または負の任意の整数に一致させることをお勧めします。

^-?[1-9]\d*$
于 2012-09-03T00:34:30.473 に答える
6

@ r92の回答に基づいて、1970年から2019年まで:

(19[789]\d|20[01]\d)
于 2013-06-27T09:35:37.617 に答える
2

理論的には、4 桁のオプションが正しいです。しかし、実際には 1900 ~ 2099 の範囲を使用する方がよい場合があります。

さらに、非キャプチャ グループである必要があります。多くのコメントと回答は、適切な IMHO ではないグループ化をキャプチャすることを提案しています。一致する場合は機能する可能性がありますが、正規表現を使用して一致を抽出する場合は、括弧のために 4 桁の数字と 2 桁 (19 と 20) の数字が抽出されます。

これは、非キャプチャ グループを使用した完全一致で機能します。

(?:19|20)\d{2}

于 2018-04-16T08:59:11.903 に答える
1

[ ^-]\d{4}$:マイナス記号-が4桁の前になるのを防ぎます。withを
使用して、文字列の先頭をキャッチすることもできます。それは実際にはあなたのシナリオに依存します...^\d{4}$^

于 2010-12-07T07:17:30.357 に答える
0

Javaでこの正規表現を使用します^(0[1-9]|1[012])[/](0[1-9]|[12][0-9]|3[01])[/](19|[2-9][0-9])[0-9]{2}$

1900年から9999年までの作品

于 2015-01-22T06:41:33.743 に答える
0

これも使えます。

([0-2][0-9]|3[0-1])\/([0-1][0-2])\/(19[789]\d|20[01]\d)
于 2019-08-20T11:45:12.633 に答える
0

整数を文字列に変換できます。マイナス記号は数字と一致しないため、マイナスの年はありません。

于 2010-12-07T07:19:00.563 に答える