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

Mic*_* BW 0 javascript regex jquery

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

但是当我输入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);
}
Run Code Online (Sandbox Code Playgroud)

我没有和这个解决方案结婚,所以如果你能建议一个更好的方法,请评论.

Phr*_*ogz 6

如果字符串匹配,你觉得会是个不错的日期一种或多种格式的测试取而代之的,我会建议,而不是询问的JavaScript 认为这是一个有效的日期:

function isValidDate(str){
  return !isNaN(new Date(str));
}
Run Code Online (Sandbox Code Playgroud)

这假设您将接受用户以各种格式提供的内容(例如,可怕的美国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
}
Run Code Online (Sandbox Code Playgroud)

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

另请参阅:确保日期有效的Javascript方法