0

JavaScriptで正規表現を使用して日付を検証しています。私が使用している正規表現は

/^(((((0?[1-9])|(1\d)|(2[0-8]))\/((0?[1-9])|(1[0-2])))|((31\/((0?[13578])|(1[02])))|((29|30)\/((0?[1,3-9])|(1[0-2])))))\/((20[0-9][0-9])|(19[0-9][0-9])))|((29\/02\/(19|20)(([02468][048])|([13579][26]))))$/

これは日付と正確に一致しますが、$ を使用して文字列の末尾をマークしているにもかかわらず、1/1/2001ff などの値と一致します。しかし、ff1/1/2001 のような値を指定すると、無効になります。したがって、文字列の開始を考慮して、文字列の末尾部分を無視します。

誰でもこの理由を知っていますか。

4

2 に答える 2

2

From: JavaScript で「無効な日付」の Date インスタンスを検出する

if ( Object.prototype.toString.call(d) === "[object Date]" ) {
  // it is a date
  if ( isNaN( d.getTime() ) ) {  // d.valueOf() could also work
    // date is not valid
  }
  else {
    // date is valid
  }
}
else {
  // not a date
}

論理的には、正規表現を使用して日付を照合するよりも、日付が有効かどうかを確認する方がはるかに理にかなっています。ただし、日付を検索しようとしている場合、正規表現は引き続き機能します (たとえば、Notepad ++ の検索でテストしました)。それ以外は、コメントが言ったように、そのような複雑な正規表現を使用する理由はありません。

于 2013-05-06T07:02:29.023 に答える
0

Dracs が正しく指摘したように、問題は括弧の欠落にありました。ご指摘ありがとうございます。JavaScript の日付オブジェクトを使用しない理由は、テキスト ボックスで mm/dd/yyyy 形式を許可するだけでよいためです。したがって、正規表現を使用してテキストボックスを検証するのは簡単です。

于 2013-05-06T07:52:10.840 に答える