1

javascriptの正規表現を使用して、生年月日テキストボックスを検証しようとしています。これが私のコードです

var patt=/[0-9]{1,2}/[0-9]{1,2}/[0-9]{4}/;
alert(patt.test("1985/08/03"));

そしてエラーは言った:SyntaxEror:予期しないトークン{

理由がわかりません。このパターンは、asp.netのRegularExpressionValidatorコントローラーで正常に機能します。どうもありがとう

4

4 に答える 4

4

You need to escape the / characters, otherwise the interpreter sees the first one and thinks that's the end of the regexp.

You should also put anchors in your regexp to ensure it matches the whole string, and doesn't match any string which happens to contain that pattern.

For brevity you can use \d instead of [0-9], too:

var patt = /^\d{1,2}\/\d{1,2}\/\d{4}$/;

NB: your sample doesn't work - you've put the year first, but the RE is expecting it to be last.

于 2012-05-28T12:50:20.383 に答える
2

Here a sample code that really validate a date in JavaScript :

function isValidDate(dateStr) {
    s = dateStr.split('/');
    d = new Date(+s[2], s[1]-1, +s[0]);
    if (Object.prototype.toString.call(d) === "[object Date]") {
        if (!isNaN(d.getTime()) && d.getDate() == s[0] && 
            d.getMonth() == (s[1] - 1)) {
            return true;
        }
    }
    return false;
}

See Detecting an "invalid date" Date instance in JavaScript

于 2012-05-28T12:49:07.243 に答える
1

The problem is that you are not escaping the / separators in the pattern. Try

/[0-9]{1,2}\/[0-9]{1,2}\/[0-9]{4}/;
于 2012-05-28T12:50:36.853 に答える
0

正規表現(エスケープされていない'/'を修正した後)は、正しい桁数のみをチェックします。
月とうるう年に応じて、月が1から12の間、日が1から31の間、30日、28日、または29日であるかどうかはチェックされません。

それで十分な場合、正規表現で取得できる最も近いものは(dd / mm / yyyyと仮定):

/(3[01]|[12][0-9]|0?[1-9])\/(1[012]|0?[1-9])\/([12][0-9]{3})/

日は1〜31の範囲になります
月は1〜12の範囲になります私は1000から2999までの年を制限するために自由を取りましたが、1970から2059までの使用を
制限したい場合は、形式をキャッチできます(19[789][0-9]|20[0-5][0-9])年の部分。
そして、あなたは$ 1で日、$ 2で月、そして$ 3で年を得るでしょう(私は思う)

于 2012-05-28T13:27:53.817 に答える