6

「10.02.2012」や「10-02-2012」などのヨーロッパの日付形式を検証したい。したがって、次の正規表現を作成しました。

/\d[0-9]{2}(.|-)\d[0-9]{2}(.|-)\d[0-9]{4}/

残念ながら、日付の形式が正しい場合でも、メッセージは常に無効になります。

「(。|-)」を「。」に置き換えると ドットで区切られた日付のみを検証するために機能します。だから、問題は「(。|-)」に違いないと思います。何かアイデアはありますか?

4

3 に答える 3

10

\d 文字クラスを使用してこれまでに提供された回答では、00.00.0000 や 99.99.9999 などの日付が通過できることに注意してください。これをキャッチしたい場合は、より具体的な正規表現を使用する必要があります。以下の例では、1900 年 1 月 1 日から 2099 年 12 月 31 日までの有効な日付を許可します。

^([1-9]|0[1-9]|[12][0-9]|3[01])[-\.]([1-9]|0[1-9]|1[012])[-\.](19|20)\d\d$

0000 から 9999 までの任意の年を許可する場合は、次のように変更できます。

^([1-9]|0[1-9]|[12][0-9]|3[01])[-\.]([1-9]|0[1-9]|1[012])[-\.]\d{4}$
于 2013-01-28T16:33:27.830 に答える
4

マイナーな変更後、正しく動作します:

\d{2}(\.|-)\d{2}(\.|-)\d{4}
  1. 「。」エスケープする必要があります。

  2. \d は [0-9] と同じです。繰り返す必要はありません。

http://regexr.com?326f2

于 2012-09-18T08:24:28.640 に答える
1

OK、私はあなたの問題を見ます...

/\d[0-9]{2}(.|-)\d[0-9]{2}(.|-)\d[0-9]{4}/

\d は [0-9] と同じであるという点で冗長です。したがって、実際にはここでは 2 桁ではなく 3 桁に一致しています。

/\d{2}(\.|-)\d{2}(\.|-)\d{4}/

また

/[0-9]{2}(\.|-)[0-9]{2}(\.|-)[0-9]{4}/

ただし、両方を使用しないでください

于 2012-09-18T08:24:19.393 に答える