正则表达式为9999.9999或9999或9999:9999

时间:2011-06-10 10:38:16

标签: javascript asp.net regex

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

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

3 个答案:

答案 0 :(得分:4)

你正在寻找这个

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

解释

^               # start-of-string
\d{4}           # four digits
(?:             # non-capturing group
  ([.:])        #   delimiter char (store in group 1)
  \d{4}         #   four digits
)?              # end group, make optional
(?:             # non-capturing group
  -             #   a dash
  \d{4}         #   four digits
  (?:\1\d{4})?  #   whatever group 1 was plus four digits (optional)
)?              # end group, make optional
$               # end-of-string

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

或者,您可以使用(?=.{4}$|.{9}$|.{19}$)

添加正则表达式

答案 1 :(得分:1)

$标记了^标记其开头的行尾,因此/^(\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)

答案 2 :(得分:0)

这应该这样做。

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