日期:2014-05-16  浏览次数:20449 次

这个RegExp的问题,关于验证输入的“日期、月份、年份”格式是否正确的疑惑!
var cc1_regexp = /\^0?[1-9]|1[0-9]|2[0-9]|3[0-1]\$/;
var invalid = cc1_regexp.test(document.loginform.cc1.value);
if (!invalid) {
errorMessage(document.loginform.cc1, "invalid");
return false;
}


就拿日期做例子,这个问题何在?现在出来什么东西都是INVALID。

------解决方案--------------------
/0?[1-9]|[1-2][0-9]|[3][0-1]/

/\^0?[1-9]|1[0-9]|2[0-9]|3[0-1]\$/;
\ 这个是转义字符. \^就代表^,而不是以0开头了.同理\$ 我写的你试试 应该可以的
------解决方案--------------------
cc1_regexp = /^([0]?[1-9])$|^([1-2][0-9])$|^([3][0-1])$/;

每一个分块都要加上匹配开始结束符吧,否则会匹配任意长度的,试试这个看~
------解决方案--------------------
/0[1-9]|[12]\d|3[0-1]/ 这个应该是可以的 我试过了
var valid = cc3_regexp.exec(cc1); 改成 var valid = cc3_regexp.test(cc1);同时确保cc1是string这样就可以匹配0[1-9] 如果是数字前导0会去掉的 匹配就错误了
------解决方案--------------------
崩溃...
JScript code

//匹配yyyy-MM-dd(限制年必须为4位数,即必须是1000年之后,9999年之前的日期)
/^[1,2]\d{3}-((0?[1-9])|(1[012]))-((0?[1-9])|([12]\d)|(3[01]))$/
//匹配年(范围0-9999)
/^\d{1,4}$/
//匹配月
/^(?:(0?[1-9])|(1[012]))$/
//匹配日
/^(?:(0?[1-9])|([12]\d)|(3[01]))$/