精确匹配 8 位数字和 0 个或多个破折号

Mik*_*ike 3 regex string numbers phone-number

我正在尝试匹配包含 0 个或多个破折号的 8 位数字电话号码。例如,以下内容应全部匹配:

12345678
123456-78
1234-5678
1-2-3-4-5-6-7-8
Run Code Online (Sandbox Code Playgroud)

如果我忽略破折号,那就相当简单了。我可以使用:

[\d]{8}
Run Code Online (Sandbox Code Playgroud)

如果我想匹配至少包含 8 个字符(数字和破折号)的字符串,我可以使用:

[\d-]{8,}
Run Code Online (Sandbox Code Playgroud)

但是,在这里我无法设置字符数的上限,因为我不知道该数字有多少个破折号。

我想到的唯一方法是使用:

[0-9][-]?[0-9][-]?[0-9][-]?[0-9][-]?[0-9][-]?[0-9][-]?[0-9][-]?[0-9]
Run Code Online (Sandbox Code Playgroud)

然而,对于(至少在我看来)看似简单的事情来说,这似乎真的很混乱。有没有更简单的方法来做到这一点?

anu*_*ava 5

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

^([0-9]-?){8}$
Run Code Online (Sandbox Code Playgroud)

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

^(\d-?){8}$
Run Code Online (Sandbox Code Playgroud)

正则表达式演示