値を指定して、有効な年であるかどうかを確認するために検証する必要があります。私の基準は単純で、値は4
文字の整数でなければなりません。 1000
以前の年数は許可されず、5000
などの年数も許可されないため、これが最善の解決策ではないことを知っています。この基準は、現在のシナリオに適しています。
私が思いついたのは
\d{4}$
これは機能しますが、負の値も許可します。
正の整数のみが許可されるようにするにはどうすればよいですか?
開始アンカーを追加する必要があります^
なので:
^\d{4}$
正規表現\d{4}$
は文字列に一致します4桁で終わる。したがって、-1234
が受け入れられます。
開始アンカーを追加すると、begin and endの文字列のみが4桁で一致します。つまり、実質的に4桁のみが含まれている必要があります。
1000年から2999年
^[12][0-9]{3}$
1900-2099の場合
^(19|20)\d{2}$
この質問に対する「受け入れられた」答えは、間違っていて近視的です。
有効な年ではない0001
などの文字列と一致するという点で間違っています。
notが9999を超える値と一致するという点で近視です。 Y2K ?代わりに、正規表現を使用します。
^[1-9]\d{3,}$
将来の年に加えて、過去の年と一致させる必要がある場合、次の正規表現を使用して任意の正の整数と一致させることができます。
^[1-9]\d*$
過去の日付を期待していなくても、誰かがタイムマシンを発明してソフトウェアを持ち帰りたい場合に備えて、とにかくこの正規表現を使用することができます。
注:この正規表現は、通常は負の整数ではなくBCの指定で表されるため、1年より前の年を含むすべての年に一致します。もちろん、この規則は次の数千年で変更される可能性があるため、最良のオプションは、正または負の整数に次の正規表現を一致させることです。
^-?[1-9]\d*$
これは1900〜2099で機能します。
/(?:(?:19|20)[0-9]{2})/
1970年から2019年の間、@ r92の回答に基づいて作成します。
(19[789]\d|20[01]\d)
理論的には、4桁のオプションが適切です。ただし、実際には1900〜2099の範囲を使用する方が適切な場合があります。
さらに、非キャプチャグループである必要があります。多くのコメントと回答は、適切な私見ではないグループ化のキャプチャを提案しています。一致する場合は機能する可能性がありますが、正規表現を使用して一致を抽出する場合は、構文解析のために4桁の数字と2桁(19および20)の数字も抽出します。
これは、非キャプチャグループを使用した完全一致で機能します。
(?:19|20)\d{2}
年とともに他の単語を含む文字列で年をテストするには、次の正規表現を使用できます。\ b\d {4}\b
つかいます;
^(19|[2-9][0-9])\d{2}$
1900〜9999年。
9999以降を心配する必要はありません-A.I.それまでにすべてのプログラミングを行います!!!へへへへ
https://regex101.com/ で正規表現をテストできます
また、非キャプチャグループに関する詳細情報(上記のコメントの1つに記載)はこちら http://www.manifold.net/doc/radian/why_do_non-capture_groups_exist_.htm
[^-]\d{4}$
のようなsthを使用できます:マイナス記号-
が4桁の前になるのを防ぎます。
_^\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)
/ ^\d {4} $ /これは、文字列が4つの数字のみで構成されているかどうかを確認します。このシナリオでは、年989を入力するために、代わりに0989を指定できます。
整数を文字列に変換できます。マイナス記号は数字と一致しないため、負の年はありません。
YYYYまたはYYYYMMDDと一致させる必要がある場合は、次を使用できます。
^((?:(?:(?:(?:(?:[1-9]\d)(?:0[48]|[2468][048]|[13579][26])|(?:(?:[2468][048]|[13579][26])00))(?:0?2(?:29)))|(?:(?:[1-9]\d{3})(?:(?:(?:0?[13578]|1[02])(?:31))|(?:(?:0?[13-9]|1[0-2])(?:29|30))|(?:(?:0?[1-9])|(?:1[0-2]))(?:0?[1-9]|1\d|2[0-8])))))|(?:19|20)\d{2})$