目前我写这样的正则表达式:/^([\d+]*-)+([\d]*-)+([\d])*$/
我希望结果遵循此模式00-123-456-789
或00123456789
(在数字组之间划线或根本没有划线)
00-123--457-789
-00-123-456-789-
-00123456789-
00-123-456-789-
如何修改正则表达式以匹配上面的模式?
答案 0 :(得分:14)
如果您的问题需要在示例中指定的特定段长度,则可以使用:
/^\d{2}-?\d{3}-?\d{3}-?\d{3}$/
这将接受00-123-456-789
,但会允许丢失任何短划线。如果您只想允许所有破折号或没有破折号,那么您可以使用:
/^\d{2}-\d{3}-\d{3}-\d{3}$|^\d{11}$/
仅接受00-123-456-789
或00123456789
,但不允许仅丢失一些破折号。
或者,如果你的意思是你可以在它们之间有任意数量的数字和任意数量的单个破折号,那么你可以使用它:
/^\d+(-\d+)*$/
答案 1 :(得分:13)
尝试这样的事情
/^(\d+-?)+\d+$/
答案 2 :(得分:4)
如果我理解正确,您希望您的正则表达式代表字符串,该字符串由一个数字组组成,后跟(可选)带有-
分隔符的其他数字组。
\d+ # represents a number group
(-\d+)* # represents 0 or more additional number groups beginning with "-"
因此,连同必要的开头和结尾断言一起,我们有:
^\d+(-\d+)*$
答案 3 :(得分:2)
以下答案将用于匹配
00-123-456-789或00 123 456 789
/ ^ [\ d] {2} [ - \ s]的[\ d] {3}?[ - \ s]的[\ d] {3}?[ - \ s]的[\ d] {3- } $ /
如果您只想匹配连字符( - )或不连字符( - )
然后它会做
/ ^ [\ d] {2} [ - ] [\ d] {3}?[ - ] [\ d] {3}?[ - ] [\ d] {3} $ /
答案 4 :(得分:1)
如果您只想接受## - ### - ### - ###或###########,那么您需要的是:
/^(([\d+]{2}\-)([\d]{3}\-){2}([\d]{3})|[\d]{11})$/
答案 5 :(得分:0)
根据您提供的内容,此正则表达式^-?(\d+-?)+$
符合此
-00-123-456-789-
-00123456789-
00-123-456-789-
00123456789
但与此不匹配:
00-123--457-789
故障:
^-?
)\d+-?
)(\d+-?)+
)$
)答案 6 :(得分:0)
@godwin:由于我无法在您的帖子中添加评论,似乎没有其他人回复,让我至少解决一个问题。一开始你有
[\d+]{2}\-
\d+
会匹配一个或多个数字,并且您要求重复两次,因此整个细分受众群将匹配123456789-
:
[\d+]
= 12345678
(贪婪匹配)[\d+]
= 9
\-
= -
你也可能不需要逃离破折号,因为它不在群组"[]"
内。