我知道有很多关于如何匹配某些电话号码类型的正则表达式示例。对于我的例子,我只想允许数字和一些特殊字符。我再次无法实现这一目标。
应该允许的电话号码可以采用这些形式
5555555555
555-555-5555
(555)5555555
(555)-555-5555
(555)555-5555 and so on
我只想要一些允许[0-9]和特殊字符'(',')'和' - '
的内容到目前为止,我的表达式看起来像这样
/^[0-9]*^[()-]*$/
我知道这是错的,但逻辑上我认为这意味着允许数字0-9或允许字符(,)和 - 。
答案 0 :(得分:5)
这匹配你想要的数字,(,)和 -
/^[0-9()-]+$/
答案 1 :(得分:5)
^(\(\d{3}\)|\d{3})-?\d{3}-?\d{4}$
\(\d{3}\)|\d{3}
三位数,有或没有()
- 更简单的正则表达式是\(?\d{3}\)?
,但这样可以(555-5555555
和555)5555555
等。-
后跟三位数字-
后跟四位数字请注意,这仍然允许555555-5555
和555-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.