【问题标题】:Regex for Date Validation in javascriptjavascript中日期验证的正则表达式
【发布时间】:2013-05-03 23:02:03
【问题描述】:

请有人给出日期验证正则表达式,这将允许以下规则是

  1. 应该允许mm/dd/yyyy, m/d/yyyy, mm/d/yyyy, m/d/yyyy(不允许yy)
  2. 当月(30 和 31)验证的天数。
  3. 闰年和非闰年的 2 月验证。

【问题讨论】:

  • [0-9]{1,2}/[0-9]{1,2}/[0-9]{4} 或见stackoverflow.com/questions/5465375/…
  • @MarioDeSchaepmeester:请do not post LMGTFY 链接。
  • @thg435 这是我第一次这样做,别担心,我不打算再这样做了。这个问题只是问它..
  • @MarioDeSchaepmeester 在给这些类型的 cmets 之前,请想一想,谁知道如何使用 Stack Overflow,他们不知道如何使用 google...

标签: javascript jquery asp.net-mvc regex validation


【解决方案1】:

不要尝试用正则表达式完全解析日期!遵循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

【讨论】:

  • parseInt(match[0], 10)correct syntax
  • @Mr_Green 是的..如果数字以0 开头,您是对的,但此功能已被弃用,因此无论如何它将是基数 10..
  • Ecmascript 5 也推荐radix
【解决方案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
}

【讨论】:

    【解决方案3】:

    这是一个完整的验证例程

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-14
      • 1970-01-01
      • 2013-04-22
      • 2011-05-16
      • 1970-01-01
      • 2014-03-22
      • 1970-01-01
      相关资源
      最近更新 更多