我正在尝试使用 javascript 正则表达式来验证出生日期文本框。这是我的代码
var patt=/[0-9]{1,2}/[0-9]{1,2}/[0-9]{4}/;
alert(patt.test("1985/08/03"));
并且错误说: SyntaxEror: Unexpected token {
我不明白为什么,这种模式在 asp.net RegularExpressionValidator 控制器中运行良好。非常感谢
我正在尝试使用 javascript 正则表达式来验证出生日期文本框。这是我的代码
var patt=/[0-9]{1,2}/[0-9]{1,2}/[0-9]{4}/;
alert(patt.test("1985/08/03"));
并且错误说: SyntaxEror: Unexpected token {
我不明白为什么,这种模式在 asp.net RegularExpressionValidator 控制器中运行良好。非常感谢
您需要转义/
字符,否则解释器会看到第一个字符并认为这是正则表达式的结尾。
您还应该在您的正则表达式中放置锚点,以确保它与整个字符串匹配,并且不匹配恰好包含该模式的任何字符串。
为简洁起见,您也可以使用\d
代替[0-9]
:
var patt = /^\d{1,2}\/\d{1,2}\/\d{4}$/;
注意:您的样本不起作用 - 您已将年份放在首位,但 RE 预计它将是最后一个。
这是一个真正验证 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;
}
问题是您没有转义模式中的 / 分隔符。尝试
/[0-9]{1,2}\/[0-9]{1,2}\/[0-9]{4}/;
正则表达式(在您修复非转义的“/”之后)只会检查正确的位数。
它不会检查月份是否在 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 美元的年份(我认为)