正则表达式日期验证错误

时间:2011-07-18 06:06:02

标签: regex

我是正则表达式的新手,我正在尝试使用正则表达式here来验证日期:

^[1-31]\.[1-12]\.[1999-2005]$

但是我得到的输出是“无效的reguar表达式”

有人可以告诉我,我在正则表达式上面做了什么错误吗?

4 个答案:

答案 0 :(得分:4)

正则表达式无法匹配数字范围,就像您使用[1-31]一样。它只能匹配字符范围。您需要将[1-31]([12]?[0-9]|3[01])匹配 - 这不是世界上最友好的事情。

答案 1 :(得分:2)

您可以使用:

[0-9]{2}.[0-9]{2}.[0-9]{4}

^(0[1-9]|[12][0-9]|3[01]).(0[1-9]|1[012]).(19|20)[0-9]{2}$

两者都符合您的日期,但不会验证它。 我怀疑正则表达式是验证日期的好方法,因为你必须检查30到31之间以及28加闰年。

可能有正则表达式处理包括闰年在内的所有组合。但我建议使用您环境的现有功能。

例如,如果使用Ruby,则使用PHP checkdate()或日期类。

答案 2 :(得分:1)

试试这个:

^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)[0-9]{2}$

它可以匹配以下字符串〜

12.12.1999
12-12-1999
12 12 1999
12/12/1999

答案 3 :(得分:0)

我这样做,它完美地运作了......

for(var i=0; i<100;i++){
    if( /^([1-9]|[1-2][0-9]|[3][0-1])$/.test(i) ) {
        console.log(i);
    }
}
// display only the range of 1 to 31 and disregards the 32-100