用于测试日期格式的正则表达式

Regex for testing date formatting

本文关键字:正则表达式 格式 日期 测试 用于      更新时间:2023-09-26

我发现了一个非常有用的正则表达式,用于在正则表达式示例站点中测试日期字段的格式和内容

但是当我输入超过2000年的日期时,我得到了一个验证,因为这是一个输入出生日期的字段,所以你可以看到为什么这会是一个问题。我相信这是一个简单的修复,但正则表达式吓到我了。

$('#txtDOB').blur(function() {
//$('span.error-keyup-5').remove();
var inputVal = $(this).val();
var dateReg = /^[0,1]?'d{1}'/(([0-2]?'d{1})|([3][0,1]{1}))'/(([1]{1}[9]{1}[9]{1}'d{1})|([2-9]{1}'d{3}))$/;
if(!dateReg.test(inputVal)) {
    alert('invalid date format: ' + inputVal);
}

我没有结婚,所以如果你能提出一个更好的方法,请评论走开。

与其测试字符串是否匹配一种或多种你认为可能是好日期的格式,我建议询问JavaScript是否认为这是一个有效的日期:

function isValidDate(str){
  return !isNaN(new Date(str));
}

这假定您将接受用户提供的各种格式中的任何一种(例如:比如可怕的美国MM/DD/YYYY或者更正常的ISO8601 YYYY-MM-DD)。如果你有一个特定的格式,你只会接受,然后解析你的字符串基于此,取出年/月/日期,然后问JavaScript这是否是一个有效的日期:

function isValidDate(year, month, date) {
  var d = new Date(year*=1, month-=1, date*=1, 12);    // noon to skip DST issues
  return d.getFullYear()==year && d.getMonth()==month; // wrong date->wrong month
}

您需要检查年份/月份/日期是否全部匹配,因为new Date(2011,11,32)被接受并解释为2012-1-1。

参见:Javascript方法确保日期是有效的

这里有很多混乱。首先,消除所有的{1}。这只意味着一个实例,这是完全多余的。此外,具有一个值的字符类与字符本身相同。因此,[1]变成了1。

那么,剩下的就是:

 /^[01]?'d'/(([0-2]?'d)|([3][01]))'/((199'd)|([2-9]'d{3}))$/

这大概是MM/DD/YYYY。但YYYY只是199[0-9]和任何年份> 2000和<9999. 哇,那是一个日期范围!

作为基础,请尝试:

 /^[01]?'d'/(([0-2]?'d)|([3][01]))'/([12]'d{3}))$/

给出的年份范围为1000 - 2999。但是正如上面Tim所说,如果您想要真正有效的日期,您应该使用特定的日期验证器。

如果你需要将日期字符串解析为日期,那么我会检查这个库:

  • DateJS