如何验证范围之间的有效月/年

时间:2015-01-07 09:37:50

标签: php regex validation

如何按照mm/yyyy格式验证用户的日期输入,yyyy范围是20022030。因此,月份应该在112之间,而20022030以下的所有年份都无效。这是我目前的正则表达式:

^(0[1-9]|1[012])[- /.](20)\d\d$

4 个答案:

答案 0 :(得分:2)

既然您被迫使用正则表达式,那么您就是:

^(0[1-9]|1[012])[- /.](20(?:0[2-9]|[12]\d|30))$

它类似于您撰写的月份验证模式 - 0[2-9]匹配2002年至2009年,[12]\d匹配2010年至2029年,30匹配2030年。

答案 1 :(得分:0)

您可以使用checkdate()函数验证公历日期;但是,这要求您使用日期时间/日期格式,这对于确保人们不会执行以下操作非常有用:35/02/2014

但是,这样的事情可以起作用吗?

([0-2][0-9]|31)\/(0[1-9]|1[0-2])\/(200[2-9]|20[1-2][0-9]|2030)

然后将字符串转换为DateTime对象并运行checkdate()函数来检查它的格里高利?

答案 2 :(得分:0)

^(0[1-9]|(1[0-2]+)+)\/(20(0[2-9]|([1-2][0-9])|30))$

您可以使用此模式。你也可以在这里测试一下。 http://regexr.com/3a60s

故障:

^(

  1. 0[1-9]|(1[0-2]+)+)
  2. \/
  3. (20(0[2-9]|([1-2][0-9])|30)
  4. )$

    说明:

    1. 01至09或10至12之间的匹配。
    2. 匹配您的" /"
    3. 匹配从20开始的3年套装。

      • 2002年至2009年,0[2-9]
      • 或2010年至2029年[1-2][0-9]
      • 或2030,与文字30
      • 匹配

答案 3 :(得分:0)

您可以通过模式检查..这样



<input type="text" pattern="^(0[1-9]|1[012])[- /.](20(?:0[2-9]|[12]\d|30))$" />
&#13;
&#13;
&#13;