2011-04-25 104 views
5

我需要一个PHP正则表达式,通过它我可以使用下列标准验证电话号码格式:正则表达式(正则表达式)电话号码随着国家代码检查

  • 不应该包括除数字什么;
  • 不应该以零开始,因为我需要将国家代码作为前缀;
  • 允许的国家代码列表应在RegEx中;
  • 紧随国家代码后的数字不应为零;
  • 该号码的最大长度不应超过13位数字。

我试图在发布此问题之前搜索堆栈溢出,但无法找到确切的解决方案。任何帮助将不胜感激。

编辑:我只是想让用户输入有效格式的电话号码,因为目前我的客户在编写时发生一些愚蠢的格式错误。我并不担心它实际上是有效的(可通话),因为用户会亲自处理。

Regards

回答

5

我不会在这上面烧我的手指。

仅仅通过查看电话号码,您无法判断其是否有效,即使“看起来”有效,它可能不是您要查找的电话号码(即其他人的电话号码) 。

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

是足够的条件的正则表达式:

的国家代码
/^(1|20|21|..etc)[1-9][0-9]+$/ 

列表(由分隔|后面跟着一个数字)不是0 ,随后是任意数字的任意数字。

由于国家代码的长度不同(至少据我所知),您不能在13位长度检查和国家/地区检查一个正则表达式。 您可以通过一个通用的正则表达式做13长度的检查,如:

/^.{,13}$/ 

匹配任何最多13个字符长

+1

我第二个这个。 OP有良好和有效的想法,但提交无效电话号码的方式有很多,可以通过*任何*模式检查,但这并不是很重要。 – 2011-04-25 10:21:44

+0

我只希望用户以有效格式输入电话号码。我并不担心它实际上是有效的,因为用户会自己照顾自己。尽管谢谢你的回应! :) – Saad 2011-04-25 10:28:55

+0

@Saad:这是我所了解的一个例子。正则表达式:'(\ d {2,3})(\ d {4})(\ d {6})'测试编号:'911234567890' – abi1964 2011-04-25 11:01:23

3

国家代码后立即数字不应该是零;

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

他们可能是其他一些国家,但意大利是最有名的。

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

对于较短的数字,但添加了扩展名,该规则将在多个国家中被打破。

使用3位国家代码,3位数区号和8位用户号码,你是一个数字短。