6

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

34-7878-3523-4233

有了这个:

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

但表达式也允许

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

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

4

3 回答 3

23

你的正则表达式:

在行动中看到它:Regexr.com

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

火柴:

1-2
1-2-3

不匹配:

1
1-
1-2-
1-2----3
1---3
于 2012-12-25T13:05:22.603 回答
7

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

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

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

现在这将匹配一些数字的 0 次或多次重复,后跟连字符。然后在最后一位或多位数字。

于 2012-12-25T13:04:41.343 回答
3

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

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

在哪里和normal[0-9]special-

于 2012-12-25T13:05:58.180 回答