1

文字列が現在の基準に適合するかどうかをテストする最良の方法を見つけようとしています。基本的に、私はそのように来る日付を持っています:

1/17/2013  12:00 AM

月と日のフィールドは 1 桁または 2 桁ですが、年は常に 4 桁です。時間は 1 桁または 2 桁です。分フィールドは常に 2 桁です。たとえば、次の例も当てはまります。

 10/1/2013  1:00 AM

現在、私はこの正規表現を持っていますが、機能していないようです:

/^(0[1-9]|1[0-2])\/(0[1-9]|[1-2][0-9]|3[0-1])\/(20[1-9][2-9]) (0[1-9]|1[0-2]):([0-5][0-9]) (am|pm)$/

私はそれを次のように使用しています:

 $('input[name=targetMe]').each( function() {
        alert('start')
        if(/^(0[1-9]|1[0-2])\/(0[1-9]|[1-2][0-9]|3[0-1])\/(20[1-9][2-9]) (0[1-9]|1[0-2]):([0-5][0-9]) (AM|PM)$/.test($(this).val())) {
              alert('passes')
        } else {
              alert('dont')
        }
  });

現在の正規表現に何か問題がありますか、それとも別の方法で使用する必要がありますか、それともこれよりも優れた解決策がありますか?

4

4 に答える 4

1

Javascriptで解析メソッドを使用できると思います。

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/parse

したがって、次のようになります。

$('input[name=targetMe]').each( function() {
    alert('start')
    if(Date.parse($(this).val())) {
          alert('passes')
    } else {
          alert('dont')
    }
});
于 2013-01-03T12:49:18.007 に答える
1

試す:

/^(0?[1-9]|1[0-2])\/(0?[1-9]|[12]\d|3[01])\/(20[1-9]\d) (0?[1-9]|1[0-2]):([0-5]\d) ([AP]M)$/

これは、2010年から2099年までの(およびそれを含む)任意の年に一致することに注意してください。正規表現は、2012年から2099年までの年のみが必要であることを意味します。この場合、次のようなものを使用します。20(1[2-9]|[2-9]\d)

于 2013-01-03T12:49:24.880 に答える
1

わかりました、これは私がここで受け取ったすべての優れた情報を組み合わせた、私が見つけた最終的な解決策です!

$('input[name=targetMe]').each( function() {
    alert('start')
    if(/^([1-9]|1[0-2])\/([1-9]|[1-2][0-9]|3[0-1])\/(19[0-9][0-9]|20[0-9][2-9]) (0[1-9]|1[0-2]):([0-5][0-9]) (am|pm|AM|PM)$/.test($(this).val())) {
          alert('passes')
    } else {
          alert('dont')
    }

});

これは、1900 年代または 2000 年代のすべてのもの、および日と月の 1 桁と 2 桁を受け入れます。

于 2013-01-03T14:14:48.013 に答える
1

Date.Parse文字列が有効な日付かどうかの判断を試みることができます。ただし、メソッドは実装に依存するため、これに関するメモも読む必要があります - javascripts と date what mess .

元の質問に答えるには、以下のような単純な正規表現で十分です。

^([1-9]|1[0-2]?)/([1-9]|[1-2][0-9]|3[0-1])/(19|20)[0-9][0-9] +(0?[0-9]|1[0-2]?):[0-5][0-9] +(a|p)m$

** いくつかの誤った値をフィルタリングするように修正 - 数字 != 時間 **

上記は、日と月が 1 桁または 2 桁の場合、年が で始まる 4 桁の場合20、時間は 1 桁または 2 桁の場合、分は 2 桁の場合に日付を検証します。日付と時刻は 2 つのスペースで区切られます。

/直接入力には式の終わりとして中断されるという問題があるように見えるため、RegExp オブジェクトを使用しました。また、大文字と小文字を区別しない午前/午後の検索用に「i」フラグを追加しました。エスケープするか、オブジェクトを使用するように変更してください。

var regex = "^([1-9]|1[0-2]?)/([1-9]|[1-2][0-9]|3[0-1])/(19|20)[0-9][0-9] +(0?[0-9]|1[0-2]?):[0-5][0-9] +(a|p)m$";

var val = "1/17/2013  12:00 AM";
if(new RegExp(regex, "i").test(val)){
    alert("Success");
} else {
    alert("Fail");
}
于 2013-01-03T13:01:30.220 に答える