使用国家代码检查的电话号码的正则表达式(RegEx)

时间:2011-04-25 10:15:54

标签: php regex phone-number

我需要一个PHP RegEx,通过它我可以使用以下标准验证电话号码格式:

  • 除数字外不应包含任何内容;
  • 不应该以零开头,因为我需要将国家/地区代码作为前缀;
  • 允许的国家/地区代码列表应该在RegEx;
  • 国家/地区代码后面的数字不应为零;
  • 该号码的最大长度不应超过13位。

我在发布此问题之前尝试搜索Stack Overflow但找不到确切的解决方案。任何帮助都将受到高度赞赏。

编辑:我只希望用户以有效格式输入电话号码,因为目前我的客户在编写时会犯一些愚蠢的格式错误。我并不担心它实际上是有效的(可调用),因为用户将自己处理它。

此致

2 个答案:

答案 0 :(得分:5)

我不会在这上面烧伤。

只需查看电话号码,您就无法判断它是否有效,即使它“看起来”有效,也可能不是您正在寻找的电话号码(即其他人的电话号码)。

您正试图在错误的级别解决问题。验证电话号码的唯一方法是实际调用它;)

符合您标准的正则表达式:

/^(1|20|21|..etc)[1-9][0-9]+$/

国家/地区代码列表(以|分隔)后跟一个非0的数字,后跟任意数字的任意数字。

你不能在一个正则表达式中进行13长度检查和国家检查,因为国家代码的长度不同(据我所知)。 您可以使用通用正则表达式进行13长度检查:

/^.{,13}$/

匹配长达13个字符的任何内容

答案 1 :(得分:3)

  

国家/地区代码后面的数字不应为零;

该系统将因意大利而失败。意大利电话号码的领先0是从国外拨打的

他们可能是其他一些也会发生这种情况的国家,但意大利是最知名的。

  

该号码的最大长度不应超过13位。

对于较短的数字但添加了扩展名,该规则将在多个国家/地区中删除。

使用3位数的国家代码,3位数的区号和8位数的用户号码,您只需数字。