我想要一个允许数字和一个破折号或数字和一个空格的表达式。空格或破折号是可选的。我试过这个
/^([0-9]+(-[0-9]+)?)|([0-9]+(\s[0-9]+)?)$/
接受的正则表达式:
让我们解释一下您的正则表达式。
^ # beginning of line
( # start group 1
[0-9]+ # 1 or more digits
( # start group 2
- # a hyphen
[0-9]+ # 1 or more digits
)? # end group 2, optional
) # end group 1
| # OR
( # start group 3
[0-9]+ # 1 or more digits
( # start group 4
\s # a space
[0-9]+ # 1 or more digits
)? # end group 4, optional
) # end group 3
$ # end of line
OR 在行首的组 1 和行尾的组 3 之间起作用。但是您希望第 1 组和第 3 组锚定在开头和结尾。
在第 1 组和第 3 组上添加一个组:
^(([0-9]+(-[0-9]+)?)|([0-9]+(\s[0-9]+)?))$
您可以使用非捕获组(更有效)而不是捕获组
^(?:(?:[0-9]+(?:-[0-9]+)?)|(?:[0-9]+(?:\s[0-9]+)?))$
组合字符类中的连字符和空格并删除多余的组:
^[0-9]+(?:[-\s][0-9]+)?$
如果您正则表达式的味道支持它,改变[0-9]
成\d
。最后你的正则表达式变成:
^\d+(?:[-\s]\d+)?$
简单多了,不是吗?
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句