【问题标题】:Regex: Basic pattern for date format (dd.mm.yyyy) not working [duplicate]正则表达式:日期格式(dd.mm.yyyy)的基本模式不起作用[重复]
【发布时间】:2020-05-17 05:35:09
【问题描述】:

我是 Regex 的新手,正在尝试为 HTML 中的文本输入字段创建基本日期模式。

现在我只想考虑以下规则:

  • 第一个数字组,从 01 到 31 的 2 位数字
  • 第二个数字组,01到12的2位数字
  • 从 1961 到 2100 的 4 位数字第三组
  • 第一个和第二个数字组后的分隔符必须是点/句点

允许的例子:

  • 01.12.1990
  • 04.05.2000
  • 31.12.2010

我尝试了以下方法,但这对我不起作用。
有人可以告诉我我在这里缺少什么吗?

我的正则表达式模式:

pattern="[01-31].[01-12].[1961-2100]"

更新:

pattern 在我的例子中是 HTML 模式属性而不是 JS 中的变量。

非常感谢,
汤姆

【问题讨论】:

  • Character Classes 不是这样工作的。
  • @AhmedAbdelhameed:是的,这有助于数字组。非常感谢。如何检查分隔符是否只允许使用点/句点?

标签: regex regex-lookarounds


【解决方案1】:

试试这个:

pattern = "(0[1-9]|1[0-9]|2[0-9]|3[0-1])\.(0[1-9]|1[0-2])\.(\d){4}";

【讨论】:

  • 非常感谢。这有帮助,但它缺少最后一个数字组的范围,它对我不起作用。注意:在我的例子中,模式是 HTML 模式属性,而不是 JS 中的变量。
  • 对不起!所以试试这个而不是 (\d) : (19[6-9][0-9]|20[0-9]{2}|2100)
【解决方案2】:

试试这个正则表达式:(0[1-9]|[12]\d|3[0-1])[\./]([0[1-9]|1[0-2])[\./](196[1-9]|19[7-9]\d|20\d\d|2100)

Demo这里

【讨论】:

  • 非常感谢!看起来它缺少从 1980 年到 1999 年的岁月,它对我不起作用。
  • @keewee279 检查演示它将匹配 1980 到 1999
  • 再次感谢。不幸的是,这种方式对我不起作用。只有当我跳过第一个数字组的前导零时它才有效。
  • 我找到了一种适合我的方法并将其发布在下面。
  • @keewee279 我给了前缀 0 可选的。现已编辑
【解决方案3】:

我找到了适合我的解决方案:

pattern="(0[1-9]|[12][0-9]|[3][0-1])[\.]0*([1-9]|1[0-2])[\.](196[1-9]|19[7-9][0-9]|20[0-8][0-9]|209[0-9])"

谢谢,
汤姆

【讨论】:

  • 为什么这么复杂?:20[0-8][0-9]|209[0-9] 而不是 2\d{3}
猜你喜欢
  • 1970-01-01
  • 2020-09-04
  • 2015-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-18
  • 1970-01-01
  • 2012-10-09
相关资源
最近更新 更多