正则表达式验证国际电话号码

时间:2011-12-24 08:27:11

标签: javascript jquery regex

任何人都可以帮我写一个满足这些条件的正则表达式来验证国际电话号码:

  1. 必须以+,00或011开头。
  2. 唯一允许的字符是[0-9], - ,。,space,(,)
  3. 长度不重要
  4. 所以这些测试应该通过:

    • +1 703 335 65123
    • 001(703)332-6261
    • +1703.338.6512

    这是我的尝试^ \ +?(\ d | \ s | \(| \)| \。| \ - )+ $但它无法正常工作。

5 个答案:

答案 0 :(得分:0)

要清理正则表达式,请使用方括号来定义字符的“OR”情况,而不是|

以下是正则表达式的重写版本,与提供的说明相匹配。

/^(?:\+|00|011)[0-9 ().-]+$/

?:有什么用?

在括号内直接执行?:时,它是告诉常规表达式引擎您要对某些内容进行分组,但不要将该信息存储起来供以后使用。

答案 1 :(得分:0)

只允许1个空格和更多连续空格(请注意第二组末尾的“?”)

(\+|00|011)([\d-.()]+ ?)+$

更快(我猜)在每个组的开头添加被动组修饰符(?:)

(?:\+|00|011)(?:[\d-.()]+ ?)+$

您可以使用this oneLinqpad之类的正则表达式备忘单来更快地根据您的需要调整此正则表达式。


如果你不熟悉Linqpad,你应该复制&将下一个块粘贴到它并将语言更改为C#语句并按F5

string pattern = @"^(?:\+|00|011)(?:[\d-.()]+ ?)+$";

Regex.IsMatch("+1 703 335 65123", pattern).Dump();
Regex.IsMatch("001 (703) 332-6261",pattern).Dump();
Regex.IsMatch("+1703.338.6512",pattern).Dump();

答案 2 :(得分:0)

^(?:\+|00|011)[\d. ()-]*$

要指定长度(如果您以后关注长度),请使用以下内容:

^(?:\+|00|011)(?:[. ()-]*\d){11,12}[. ()-]*$

显然,您可以将11,12更改为您想要的任何内容。只是为了好玩,这也与上面的一样:

^(?:\+|00|011)[. ()-]*(?:\d[. ()-]*){11,12}$

答案 3 :(得分:0)

我会选择一条完全不同的路线(实际上我在某一点上遇到了与你相同的问题,除非我用Java做过)。

此处的计划是获取输入,对其进行替换并检查输入是否为空:

  • 首先全局替换\s*;
  • 然后全局替换\(\d+\);
  • 然后无效地替换^(\+|00|011)\d+([-.]\d+)*$
  • 之后,如果结果字符串为空,则表示您匹配,否则不会。

自从我用Java编写以来,我从那时起就发现了谷歌的libphonenumber并放弃了它。但它仍然有效:

fge@erwin ~ $ perl -ne '
> s,\s*,,g;
> s,\(\d+\),,g;
> s,^(\+|00|011)\d+([-.]\d+)*$,,;
> printf("%smatch\n", $_ ? "no " : "");
> '
+1 703 335 65123
match
001 (703) 332-6261
match
+1703.338.6512
match
+33209283892
match
22989018293
no match

请注意,需要进一步测试以查看输入字符串是否至少为长度为1。

答案 4 :(得分:0)

试试这个:

 ^(\([+]?\d{1,3}\)|([+0]?\d{1,3}))?( |-)?(\(\d{1,3}\)|\d{1,3})( |-)?\d{3}( |-)?\d{4}$

它符合 E164 标准以及括号,空格和连字符的某些组合。

相关问题