正则表达式 - 简单的电话号码

时间:2010-07-15 14:31:15

标签: regex

我知道有很多关于如何匹配某些电话号码类型的正则表达式示例。对于我的例子,我只想允许数字和一些特殊字符。我再次无法实现这一目标。

应该允许的电话号码可以采用这些形式

5555555555
555-555-5555
(555)5555555
(555)-555-5555
(555)555-5555 and so on

我只想要一些允许[0-9]和特殊字符'(',')'和' - '

的内容

到目前为止,我的表达式看起来像这样

/^[0-9]*^[()-]*$/

我知道这是错的,但逻辑上我认为这意味着允许数字0-9或允许字符(,)和 - 。

7 个答案:

答案 0 :(得分:5)

这匹配你想要的数字,(,)和 -

/^[0-9()-]+$/

答案 1 :(得分:5)

^(\(\d{3}\)|\d{3})-?\d{3}-?\d{4}$
  • \(\d{3}\)|\d{3}三位数,有或没有() - 更简单的正则表达式是\(?\d{3}\)?,但这样可以(555-5555555555)5555555等。
  • 可选-后跟三位数字
  • 可选的-后跟四位数字

请注意,这仍然允许555555-5555555-5555555 - 我不知道这些是否包含在您的等等部分

答案 2 :(得分:1)

为什么你的迷路^?我认为你的意思是[()-]这实际上让你必须在正则表达式中有两个字符串开头,它永远不会匹配。

此外,\d[0-9]的一个不错的快捷方式。它们完全一样。

此外,这只会匹配一堆数字,然后是一堆()-。类似于:1294819024()()()()()-----()-的东西会匹配。我想你希望整个事情能够重复,例如:^(\d*[()-]*)*$。现在,您可以匹配此重复序列。

现在,重要的是要注意嵌套的*通常效率低下,我们可以意识到我们只想匹配任何数字和所需的标点符号:[\d()-]*

答案 3 :(得分:1)

<块引用>

^[0-9-+\s]+$


<块引用>

06754654 +54654654 +546 546 5654 43534 + +09945 345 3453 45

答案 4 :(得分:0)

对于数字,您可以使用\d。对于多个数字,您可以使用\d{n},其中n是您要匹配的位数。必须转义某些特殊字符,例如\(匹配(。例如:\(\d{3}\)\-\d{3}\-\d{4}匹配(555)-555-5555。

答案 5 :(得分:0)

第二克拉(afaik)会破坏你所做的任何事情,因为它意味着“字符串的开头”。

您似乎要求的是:

  • 字符串的开头,然后是......
  • 任意数量的数字字符,后跟......
  • 字符串的开头,然后是......
  • 任意数量的'(',')'或' - '字符,后跟......
  • 字符串结尾

即使第二克拉没有做任何事情也不会起作用,因为你在第一个'(',')'或' - '之后没有考虑任何,事实上可能只会验证一个空字符串。

你希望/^[0-9()-]+$/得到一个非常粗糙的模式,它会“起作用”。

答案 6 :(得分:0)

如果您只使用美国号码,最佳解决方案是去除所有非数字字符,然后测试以查看长度== 10.