我正在尝试使用javascript正则表达式来验证出生日期文本框。这是我的代码
var patt=/[0-9]{1,2}/[0-9]{1,2}/[0-9]{4}/;
alert(patt.test("1985/08/03"));
并且错误说:SyntaxEror:意外的令牌{
我不明白为什么,这种模式在asp.net RegularExpressionValidator控制器中运行良好。 非常感谢
答案 0 :(得分:4)
您需要转义/
个字符,否则解释器会看到第一个字符,并认为这是正则表达式的结束。
您还应该在正则表达式中放置锚点以确保它与整个字符串匹配,并且不匹配包含该模式的任何字符串。
为简洁起见,您也可以使用\d
代替[0-9]
:
var patt = /^\d{1,2}\/\d{1,2}\/\d{4}$/;
注意:您的样本不起作用 - 您已将年份放在第一位,但RE预计它将是最后一次。
答案 1 :(得分:2)
以下是真正在JavaScript中验证日期的示例代码:
function isValidDate(dateStr) {
s = dateStr.split('/');
d = new Date(+s[2], s[1]-1, +s[0]);
if (Object.prototype.toString.call(d) === "[object Date]") {
if (!isNaN(d.getTime()) && d.getDate() == s[0] &&
d.getMonth() == (s[1] - 1)) {
return true;
}
}
return false;
}
答案 2 :(得分:1)
问题是你没有转义模式中的/分隔符。尝试
/[0-9]{1,2}\/[0-9]{1,2}\/[0-9]{4}/;
答案 3 :(得分:0)
正则表达式(修复未转义的'/'后)只会检查正确的位数。
它不会检查月份是在1到12之间,1到31之间,30或28或29之间的日期,具体取决于月份和闰年。
如果这对你来说足够了,你可以得到最接近正则表达式的是(假设dd / mm / yyyy):
/(3[01]|[12][0-9]|0?[1-9])\/(1[012]|0?[1-9])\/([12][0-9]{3})/
天数将在1-31之间
月份将在1-12之间
我冒昧地将这些年限制在1000到2999之间,但如果你想限制从1970年到2059年使用(19[789][0-9]|20[0-5][0-9])
年份,你可以捕捉格式。
你会得到1美元的一天,2美元的一个月和3美元的一年(我认为)