【问题标题】:regular expression for 9999.9999 or 9999 or 9999:99999999.9999 或 9999 或 9999:9999 的正则表达式
【发布时间】:2011-06-10 10:38:15
【问题描述】:

我想要 0000.0000-9999.9999 或 0000-9999 或 0000:0000-9999:9999 的正则表达式。

可能是:/^(\d{4}$\.\d{4}$)|(\d{4}$)|(\d{4}$\:\d{4}$)/
请指导

【问题讨论】:

  • 我也不想允许“-”和任何其他字符

标签: javascript asp.net regex


【解决方案1】:

你正在寻找这个

^\d{4}(?:([.:])\d{4})?(?:-\d{4}(?:\1\d{4})?)?$

解释

^ # 字符串开头 \d{4} # 四位数字 (?: # 非捕获组 ([.:]) # 分隔符字符(存储在第 1 组中) \d{4} # 四位数字 )? # 结束组,可选 (?: # 非捕获组 - # 一个破折号 \d{4} # 四位数字 (?:\1\d{4})? # 无论第 1 组是什么加上四位数(可选) )? # 结束组,可选 $ # 字符串结尾

这仍然允许0000-9999.9999。您可以通过在成功匹配后评估字符串长度来检查这种特殊情况(即,必须是 4、9 或 19)。

或者,您可以在正则表达式前面加上(?=.{4}$|.{9}$|.{19}$)

【讨论】:

  • 这不处理0000-9999
  • @lepple:我知道 - 不应该匹配。 0000-9999 是指从00009999 的范围,即任何四位数字组合。
  • 最后一个捕获组可能是非捕获的。
  • @Qtax:是的。我也会补充一下。 @Martin:已修复。
【解决方案2】:

$ 表示行尾,就像^ 表示行首一样,所以/^(\d{4}$\.\d{4}$)|(\d{4}$)|(\d{4}$\:\d{4}$)/ 是错误的。

我会尝试:

/^(\d{4}\.\d{4})|(\d{4})|(\d{4}\:\d{4})$/

改为。

您还可以将第二部分设为可选,并允许 .:(如果存在):

/^\d{4}([\.:]\d{4})?$/

(我更喜欢 Perl 正则表达式,但它也应该适用于 JavaScript)

【讨论】:

  • @MayP:提供的表达式在 JavaScript 中非常好。顺便说一句,字符组内的. 无需转义。
  • @MayP: AFAIK 它也应该适用于 JavaScript。我现在无法测试它。
  • @Felix:谢谢,我考虑过.,但为了安全起见,我保留了\ :-)
  • @Martin Scharrer:我怎么能允许 0-9999?
  • @MayP:应该可以使用\d{1,4} 而不是\d{4}
【解决方案3】:

应该这样做。

/[0-9]{4}((\.|-|:)?[0-9]{0|4})?/

【讨论】:

  • 这也允许0000:0000:0,不是吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-16
  • 2017-06-04
  • 2021-10-12
  • 1970-01-01
  • 2012-12-12
  • 2012-08-29
相关资源
最近更新 更多