2014-10-31 21 views
1

我有一个数字和分隔符的字符串。 这些数字可以用commahyphen分开。但可能永远不会有两个数字,它们之间用逗号分隔,而没有逗号。如何使用正则表达式验证破折号分隔值?

例子:

有效:123,12,2,1-3,1,1-3,1

无效:123,12,2,1-3,1,1-3-5,1

我有一个正则表达式,几乎工程,但它不检测这些1-3-5无效线路。

如何改进以下内容?

^([0-9])+((,|-)[0-9]+)*$ 

回答

1

你可以分解你的输入:

  • 正常:一个或多个数字,后面可以跟一个破折号然后一个或多个数字;
  • 特殊:逗号。

正常情况下的正则表达式可以写为\d+(?:-\d+)?;对于特殊情况,这只是,

运用normal* (special normal*)*模式,并添加锚和量词,我们有:

^\d+(?:-\d+)?(,\d+(?:-\d+)?)*$ 
2

这里有一个解决方案:

^(?:\d+(?:-\d+)?(?:,|$))+$ 

Demo

说明:匹配一个号码,后面可以跟一个破折号和另一个数字,然后匹配逗号或字符串的结尾。并重复。

1

可以使用环视这将搜索-digits-让你的正则表达式可以像添加条件:

^(?!.*-\\d+-)[0-9]+([,-][0-9]+)*$ 
^^^^^^^^^^^^-negative look-ahead, match will fail if there is any -digits- in your string 
+0

它不工作http://regex101.com/r/gO7yT8/2 – 2014-10-31 22:44:23

+0

@ alphabravo使用'\ d'而不是'\\ d'。在Java中,'''''也需要在String中转义,所以我这样写了。 – Pshemo 2014-10-31 22:47:51

+0

我明白了,你还必须添加'^'锚。 – 2014-10-31 22:50:07

相关问题