Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用于测试日期格式的正则表达式_Javascript_Jquery_Regex - Fatal编程技术网

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

Javascript 用于测试日期格式的正则表达式,javascript,jquery,regex,Javascript,Jquery,Regex,我在一个regex示例站点中找到了一个非常有用的正则表达式,用于测试日期字段的格式和内容 但是当我输入2000年以前的日期时,我得到了一个验证,因为这是一个输入出生日期的字段,你可以看到为什么这会是一个问题。我相信这是一个简单的解决办法,但正则表达式让我感到害怕 $('#txtDOB').blur(function() { //$('span.error-keyup-5').remove(); var inputVal = $(this).val(); var dateReg = /^[0,1]

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

但是当我输入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);
}

我不同意这个解决方案,所以如果你能建议一个更好的方法,请留言

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

因此,这就给我们留下了:

 /^[01]?\d\/(([0-2]?\d)|([3][01]))\/((199\d)|([2-9]\d{3}))$/
这大概是年月日。但YYYY仅为199[0-9],任何年份都大于2000年且小于9999年。哇,这是一个约会范围

作为一种基本方法,请尝试:

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

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

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

function isValidDate(str){
  return !isNaN(new Date(str));
}
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
}
这假设您将接受用户以各种格式提供给您的内容(例如,可怕的US MM/DD/YYYY或更理智的ISO8601 YYYY-MM-DD)。如果您有一个只接受的特定格式,则根据该格式解析字符串,取出年/月/日期,然后询问JavaScript这是否是有效日期:

function isValidDate(str){
  return !isNaN(new Date(str));
}
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
}
您需要检查年/月/日期是否全部匹配,因为
新日期(2011,11,32)
被接受并解释为2012-1-1


另请参见:

如果需要将日期字符串解析为日期,则我将签出此库:


正则表达式不是日期验证的首选工具(请参见为什么不)。他们可以检查“某事可能是一个日期”,但是如果你需要考虑日期范围、月份长度、闰年等,你最好用A。这不是一个特别好的正则表达式,但是我能找到你(特别是无数的代码> { 1 } <代码>是没有意义的)。为什么不创建一个javascript日期对象并使用它的本机函数呢?您的正则表达式不能使用哪个日期?它似乎应该接受2000年之后的日期。例如,见-@ipr101-regex声称2100年2月29日是有效的,而事实并非如此。(2100年不是闰年。)您建议使用其他javascript方法正是我所需要的。
newdate(“Hacker%1337”)
返回字符串'Tue Jan 01 1337 00:00:00 GMT-0600(中央标准时间)'