「10.02.2012」や「10-02-2012」などのヨーロッパの日付形式を検証したい。したがって、次の正規表現を作成しました。
/\d[0-9]{2}(.|-)\d[0-9]{2}(.|-)\d[0-9]{4}/
残念ながら、日付の形式が正しい場合でも、メッセージは常に無効になります。
「(。|-)」を「。」に置き換えると ドットで区切られた日付のみを検証するために機能します。だから、問題は「(。|-)」に違いないと思います。何かアイデアはありますか?
「10.02.2012」や「10-02-2012」などのヨーロッパの日付形式を検証したい。したがって、次の正規表現を作成しました。
/\d[0-9]{2}(.|-)\d[0-9]{2}(.|-)\d[0-9]{4}/
残念ながら、日付の形式が正しい場合でも、メッセージは常に無効になります。
「(。|-)」を「。」に置き換えると ドットで区切られた日付のみを検証するために機能します。だから、問題は「(。|-)」に違いないと思います。何かアイデアはありますか?
\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}$
マイナーな変更後、正しく動作します:
\d{2}(\.|-)\d{2}(\.|-)\d{4}
「。」エスケープする必要があります。
\d は [0-9] と同じです。繰り返す必要はありません。
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}/
ただし、両方を使用しないでください