我正在尝试匹配其中包含0或更多破折号的正好8位数的电话号码。例如,以下内容应全部匹配:
12345678
123456-78
1234-5678
1-2-3-4-5-6-7-8
如果我忽略破折号,那就相当简单了。我可以使用:
[\d]{8}
如果我想匹配包含至少8个字符(数字和短划线)的字符串,我可以使用:
[\d-]{8,}
但是,在这里我不能对字符数设置上限,因为我不知道该数字会有多少破折号。
我想到的唯一方法是使用:
[0-9][-]?[0-9][-]?[0-9][-]?[0-9][-]?[0-9][-]?[0-9][-]?[0-9][-]?[0-9]
但是,对于那些(至少在我看来)似乎很简单的事情来说,这似乎非常混乱。有更简单的方法吗?
答案 0 :(得分:3)
答案 1 :(得分:2)
你应该使用
^[0-9](-?[0-9]){7}$
请参阅regex demo
此模式使用
[0-9]
匹配一个数字,因为\d
在各种正则表达式中可能只匹配0
到9
的ASCII数字。(-?[0-9]){7}
- 匹配可选连字符和数字的7个序列,不允许在字符串末尾使用尾随连字符。