Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.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_Regex_Date_Validation - Fatal编程技术网

使用javascript正则表达式验证日期时出现问题

使用javascript正则表达式验证日期时出现问题,javascript,regex,date,validation,Javascript,Regex,Date,Validation,我试图使用javascript正则表达式验证日期输入,但它将有效日期返回为无效日期。我不是正则表达式专家,所以我不知道它有什么问题: /^([0-9]d{2})+(\.|-|\/)+([0-9]d{2})+(\.|-|\/)+([0-9]d{4})+$/ 我希望接受这些日期格式: 23/04/2001 23-04-2001 23.04.2001 最初我有这个,但它是接受日期与其他字符的结尾,如23/04/2001jhsdgf: /\d{2}(\.|-|\/)\d{2}(\.|-|\/)\d{4

我试图使用javascript正则表达式验证日期输入,但它将有效日期返回为无效日期。我不是正则表达式专家,所以我不知道它有什么问题:

/^([0-9]d{2})+(\.|-|\/)+([0-9]d{2})+(\.|-|\/)+([0-9]d{4})+$/
我希望接受这些日期格式:

23/04/2001

23-04-2001

23.04.2001

最初我有这个,但它是接受日期与其他字符的结尾,如23/04/2001jhsdgf:

/\d{2}(\.|-|\/)\d{2}(\.|-|\/)\d{4}/;

使用原始正则表达式,只需将新正则表达式中的^和$添加到其中。问题解决了

编辑:虽然,实际上,\.\-\/是一团乱,应该是[.\/-]


编辑2:也就是说,如果您创建第一个[.\/-],那么您可以将第二个替换为\1,然后它将要求两个分隔符相同。

您可以使用这样的正则表达式检查日期的语法是否正确:

/^(\d{1,2})([-\.\/])(\d{1,2})\2(\d{4})$/
^和$分别匹配字符串的开头和结尾 \d{1,2}匹配1或2个数字 \d{4}正好匹配4位数字 \2匹配在第二个捕获组中捕获的字符串-/ 如果匹配,则可以使用匹配的日期、月份和年份构建新日期,并将结果日期、月份和年份与匹配的值进行比较。下面是一个函数,它的作用就是:

function checkDate(dateText) {
    var match = dateText.match(/^(\d{1,2})([-\.\/])(\d{1,2})\2(\d{4})$/);
    // "31.04.2012" -> ["31.04.2012", "31", ".", "04", "2012"]
    if (match === null) {
        return false;
    }
    var date = new Date(+match[4], +match[3] - 1, +match[1]);
    return date.getFullYear() == +match[4] && 
      date.getMonth() == +match[3] - 1 && 
      date.getDate() == +match[1];
}
checkDate("30.04.2013"); // true
checkDate("31-04-2013"); // false (April has 30 days)
+用于将字符串转换为数字+01变为1 月份以0为基础,0=一月,1=二月。。。 上面的示例假设日期为dd-mm-yyy格式
对象尝试更正无效日期。尝试创建日期(如2013年4月31日)将产生2013年5月1日,上述函数将结果日期与输入参数进行比较,以检查有效性。

好的,我的原始正则表达式不也允许字母吗?如何仅指定数字并使其正常工作?\d表示任何数字。它只允许数字。啊,我明白了!谢谢,效果很好!一个简单的正则表达式检查是不够的。00-00-0000与您的正则表达式匹配。这是非常正确的,您建议我如何确保它是实际日期?99/99/9999也会匹配。我已经添加了我的答案。日期看起来像英国日期,您可能想从分隔符列表中省略/。谢谢,这帮助我更好地理解事情!为了方便用户和减少验证的需要,我决定使用jQueryUIDatePicker并禁用输入上的按键。似乎很管用。谢谢你的帮助,我很感激。不客气。您可以将输入设置为只读。对于验证:mm/dd/yyyy