2

誰かが日付検証正規表現を与えることができます。これにより、次のルールが許可されます

  1. mm/dd/yyyy、m/d/yyyy、mm/d/yyyy、m/d/yyyyを許可する必要があります (yy は許可されません) 。
  2. 月 (30 および 31) 検証の日数。
  3. うるう年とうるう年以外の 2 月の検証。
4

3 に答える 3

3

正規表現で完全に日付を解析しようとしないでください! KISSの原則に従ってください..

1>この正規表現で日付を取得する

^(\d{1,2})/(\d{1,2})/(\d{2}|\d{4})$

2> 文字列が上記の正規表現と一致する場合、月、年、日を検証します!

var match = myRegexp.exec(myString);
parseInt(match[0],10);//month
parseInt(match[1],10);//day
parseInt(match[2],10);//year
于 2013-05-09T13:05:19.783 に答える
2

これを試して:

([0-9][1-2])/([0-2][0-9]|[3][0-1])/((19|20)[0-9]{2}) 

上記の正規表現から有効な文字列を取得した場合は、文字列操作を使用して、次のようにします。

if(/([0-9][1-2])\/([0-2][0-9]|[3][0-1])\/((19|20)[0-9]{2})/.test(text)){
    var tokens = text.split('/');  //  text.split('\/');
    var day    = parseInt(tokens[0], 10);
    var month  = parseInt(tokens[1], 10);
    var year   = parseInt(tokens[2], 10);
}
else{
    //show error
    //Invalid date format
}
于 2013-05-09T13:10:45.350 に答える
1

ここに完全な検証ルーチンがあります

var myInput = s="5/9/2013";
var r = /^(\d{1,2})\/(\d{1,2})\/(\d{4})$/;
if(!r.test(myInput)) {
  alert("Invalid Input");
  return;
}
var a = s.match(r), d = new Date(a[3],a[1] - 1,a[2]);
if(d.getFullYear() != a[3] || d.getMonth() + 1 != a[1] || d.getDate() != a[2]) {
  alert("Invalid Date");
  return;
}

// process valid date
于 2013-05-09T13:05:53.913 に答える