正则表达式匹配连字符和逗号,并且只在它们之间。

3

我正在使用正则表达式检查一个字符串。

规则如下:

该字符串可以包含任何数字、连字符和逗号。

连字符和逗号应该仅出现在数字之间。不应在字符串的开头或结尾。

逗号是可选的。连字符是必须的。

例如,

有效:

10-20
10-20-3
10-20,3 

无效的:

10
-10
,10
10-20,
10-20-
10,20

到目前为止我尝试的代码:

[0-9,-]+ 

可以有人建议如何检查逗号和破折号是否在字符串的开头或结尾,以及以上条件?
3个回答

9

尝试使用这个表达式:

[0-9][0-9,-]*-[0-9,-]*[0-9]

这意味着该字符串必须:

  • 以数字开头和结尾
  • 中间包含至少一个破折号
  • 在第一个数字之后且在破折号之前,有零个或多个[0-9,-]字符
  • 在破折号和最后一个数字之间有零个或多个[0-9,-]字符

1

你应该试一下这个

[0-9][0-9,\-]*-[0-9,\-]*[0-9]

我认为字符类中的连字符需要加上反斜杠


0

表达式应该以^\A开头,以$\z结尾,否则表达式也会匹配无效的字符串,例如:

,10
20-
-34

所以表达式应该是:

^[0-9][0-9,-]*-[0-9,-]*[0-9]$

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接