与0或更多短划线完全匹配8位数

时间:2016-07-26 17:19:51

标签: regex string numbers phone-number

我正在尝试匹配其中包含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]

但是,对于那些(至少在我看来)似乎很简单的事情来说,这似乎非常混乱。有更简单的方法吗?

2 个答案:

答案 0 :(得分:3)

您可以在每个数字后使用此正则表达式和可选-

^([0-9]-?){8}$

如果您的正则表达式支持\d,请使用:

^(\d-?){8}$

RegEx Demo

答案 1 :(得分:2)

你应该使用

^[0-9](-?[0-9]){7}$

请参阅regex demo

此模式使用

  • [0-9]匹配一个数字,因为\d在各种正则表达式中可能只匹配09的ASCII数字。
  • (-?[0-9]){7} - 匹配可选连字符和数字的7个序列,不允许在字符串末尾使用尾随连字符
相关问题