正则表达式模式错误

时间:2012-05-28 12:47:32

标签: javascript regex

我正在尝试使用javascript正则表达式来验证出生日期文本框。这是我的代码

var patt=/[0-9]{1,2}/[0-9]{1,2}/[0-9]{4}/;
alert(patt.test("1985/08/03"));

并且错误说:SyntaxEror:意外的令牌{

我不明白为什么,这种模式在asp.net RegularExpressionValidator控制器中运行良好。 非常感谢

4 个答案:

答案 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;
}

请参阅Detecting an "invalid date" Date instance in JavaScript

答案 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美元的一年(我认为)