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

How to validate a valid month / year between a range

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

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

您可以使用 checkdate() 函数验证公历日期;然而,这要求您采用 DateTime/Date 格式,这有助于确保人们不会做类似这样的事情: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() 函数来检查它是否为公历?

由于您被迫使用正则表达式,因此您在这里:

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

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

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

)$

解释:

  1. 匹配 01 到 09,或 10 到 12。
  2. 匹配你的“/
  3. 匹配从 20 开始的 3 年集。

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

你可以按模式检查..这样

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