【发布时间】: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
我想要 0000.0000-9999.9999 或 0000-9999 或 0000:0000-9999:9999 的正则表达式。
可能是:/^(\d{4}$\.\d{4}$)|(\d{4}$)|(\d{4}$\:\d{4}$)/?
请指导
【问题讨论】:
标签: javascript asp.net regex
你正在寻找这个
^\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。
- 不应该匹配。 0000-9999 是指从0000 到9999 的范围,即任何四位数字组合。
$ 表示行尾,就像^ 表示行首一样,所以/^(\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)
【讨论】:
. 无需转义。
.,但为了安全起见,我保留了\ :-)
\d{1,4} 而不是\d{4}。
应该这样做。
/[0-9]{4}((\.|-|:)?[0-9]{0|4})?/
【讨论】:
0000: 或0000:0,不是吗?