正则表达式编号和连字符

时间:2012-12-25 13:02:54

标签: regex

我正在尝试将数字与正则表达式匹配,如:

34-7878-3523-4233

用这个:

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

但表达式也允许

34--34 -------- 88

那么如何在数字之间只允许一个连字符?

3 个答案:

答案 0 :(得分:17)

你的正则表达式:

查看实际操作: Regexr.com

^[0-9]+(-[0-9]+)+$

匹配

1-2
1-2-3

不匹配:

1
1-
1-2-
1-2----3
1---3

答案 1 :(得分:6)

那是因为,您已将连字符包含在角色类中允许的字符中。你应该把它放在外面。

您可以尝试这样的事情: -

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

现在这将匹配0或更多重复某些数字后跟连字符。然后是最后一个或多个数字。

答案 2 :(得分:3)

使用normal*(special normal*)*模式:

^[0-9]+(-[0-9]+)+$

其中normal[0-9]special-