我正在尝试使用以下正则表达式来测试有效日期。
^(((0?[1-9]|1[012])/(0?[1-9]|1\d|2[0-8])|(0?[13456789]|1[012])/(29|30)|(0?[13578]|1[02])/31)/(19|[2-9]\d)\d{2}|0?2/29/((19|[2-9]\d)(0[48]|[2468][048]|[13579][26])|(([2468][048]|[3579][26])00)))$
我是从
http://regexlib.com/REDetails.aspx?regexp_id=1071
我的JavaScript测试代码是:
var date='1/1/1965';
var re = new RegExp('^(((0?[1-9]|1[012])/(0?[1-9]|1\d|2[0-8])|(0?[13456789]|1[012])/(29|30)|(0?[13578]|1[02])/31)/(19|[2-9]\d)\d{2}|0?2/29/((19|[2-9]\d)(0[48]|[2468][048]|[13579][26])|(([2468][048]|[3579][26])00)))$');
alert(re.test(date));
对于这个有效的测试日期,我总是得到"false“而不是"true”。
发布于 2011-01-22 08:59:07
试试这个:
var date='1/1/1965';
var re = /^(((0?[1-9]|1[012])\/(0?[1-9]|1\d|2[0-8])|(0?[13456789]|1[012])\/(29|30)|(0?[13578]|1[02])\/31)\/(19|[2-9]\d)\d{2}|0?2\/29\/((19|[2-9]\d)(0[48]|[2468][048]|[13579][26])|(([2468][048]|[3579][26])00)))$/;
alert(re.test(date));
发布于 2011-01-22 08:55:05
只需将其放在正斜杠中:
var re = /^(((0?[1-9]|1[012])\/(0?[1-9]|1\d|2[0-8])|(0?[13456789]|1[012])/(29|30)|(0?[13578]|1[02])/31)\/(19|[2-9]\d)\d{2}|0?2/29/((19|[2-9]\d)(0[48]|[2468][048]|[13579][26])|(([2468][048]|[3579][26])00)))$/
现在,虽然这将为您提供一个可使用的正则表达式,但我不得不说这可能是regex有史以来最愚蠢的应用程序之一。你最好只实例化一个JavaScript“”对象,并使用它出人意料的友好的API来检查你需要检查什么。
如果您使用假日期实例化一个JavaScript " date“对象(如2月30日),它将滚动到sort-of对应于假日期的实际日期;换句话说,它会将假日期延续到下一个月。因此,如果您只保留月份和日期,并创建一个" date“实例,您就可以知道,如果"Date”实例提供给您的月份和日期与您提供给它的月份和日期不同,那么原始日期一定是不真实的。
发布于 2011-01-22 08:55:08
你的问题可能是斜杠的转义。
有两种方法可以在javascript中插入regexp。第一种方法是将其放在正斜杠中,第二种方法是使用RegExp对象,这意味着您必须在JavaScript代码中将regexp字符串本身作为字符串包含在内。
与Javascript中包含特殊字符(如反斜杠)的其他字符串一样(正则表达式就是这样),您必须用另一个反斜杠对它们进行转义。
因此,基本上只需将代码中的每个反斜杠替换为双反斜杠(\),就可以了。
https://stackoverflow.com/questions/4765406
复制相似问题