JavaScript正则表达式匹配仅包含X个数字

21

有人能帮助我这个蠢蛋理解为什么我的简单正则表达式没有像我期望/想要的那样工作吗?

我想匹配一个格式为MM/DD/YYYY的日期,恰好有2位和4位数字,例如01/16/1955。我的代码可以实现这一点,但它同样也匹配2+位和4+位数字,所以类似于011/16/1955或01/16/19555(多了1位数字)也会通过我的验证。

//validate date of birth
var dob_label    = $date_of_birth.find('label').text().slice(0, -1),
dob_mm           = $dob_mm.val(),
dob_dd           = $dob_dd.val(),
dob_yyyy         = $dob_yyyy.val(),     
regex_two_digit  = /^\d{2}$/,
regex_four_digit = /^\d{4}$/;

if ( (regex_two_digit.test(dob_mm)) && (regex_two_digit.test(dob_dd)) && (regex_four_digit.test(dob_yyyy)) ) {
    //a button is enabled here
} else {
    //a validation error is thrown here and the button is disabled
}

为什么不使用单个输入并使用date.js解析和格式化它以符合您的首选格式...与占位符结合使用效果非常好... - Tracker1
2个回答

42

需要指定字符串的开头和结尾

/^\d{4}$/

无论如何,为什么不使用下拉菜单呢? - CrayonViolent
1
我尝试了那个方法,但对我无效。因为用户使用键盘输入,所以没有下拉选项。修改后的代码仍然允许输入超过2或4位数。它可以验证数字(我不能输入'aa'),但仍然允许太多位数,我弄不明白... 编辑 等等,它似乎正在起作用,但我告诉你,我尝试了多次开头/结尾字符,真是鬼畜??? - magenta placenta
可能是你的刷新/缓存出了问题,代码实际上没有更新。 - CrayonViolent

1

尝试这个 ^\d{1,2}\/\d{1,2}\/\d{4}$


6
当你提供这样的答案时,你应该解释为什么你所建议的方法可以正常运行,而相对的问题代码则不能。 - Jonathan Leffler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接