如何在JavaScript中使用此正则表达式?

时间:2011-01-22 00:51:00

标签: javascript regex

我正在尝试使用以下正则表达式来测试有效日期。

^(((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));

对于这个有效的测试日期,我持续“假”而不是“真实”。

3 个答案:

答案 0 :(得分:3)

试试这个:

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)); 

答案 1 :(得分:0)

把它放在正斜杠中:

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)))$/

现在,虽然这会让你使用正则表达式,但我不得不说这可能是正则表达式中最愚蠢的应用程序之一。只需实例化一个JavaScript“Date”对象并使用它的令人惊讶的友好API来检查您需要检查的内容,您就会方式更好。

如果您使用虚假日期(如30月30日)实例化JavaScript“日期”对象,它只会滚动到实际日期,该日期与伪造日期相对应;换句话说,它将伪造的日子延续到下个月。因此,如果您只是坚持月和日,并创建一个“日期”实例,您可以知道,如果您提出的“日期”实例提供给您的月份和日期与您提供的那些不同,然后原始日期一定是不真实的。

答案 2 :(得分:0)

你的问题可能是逃避斜线。

有两种方法可以在javascript中插入正则表达式。第一种方式是将它放在正斜杠中,第二种方式,就是你使用RegExp对象的方式,这意味着你必须将regexp字符串本身作为字符串包含在JavaScript代码中。

和Javascript中的每个其他字符串一样,它包含特殊字符,例如反斜杠(你的正则表达式),你必须用另一个反斜杠来转义它们。

所以基本上只需用双反斜杠(\\)替换代码中的每个反斜杠,你应该没问题。