【问题标题】:How to validate phone number using PHP? [duplicate]如何使用 PHP 验证电话号码? [复制]
【发布时间】:2011-03-06 16:10:04
【问题描述】:

如何使用 php 验证电话号码

【问题讨论】:

  • 请定义什么使电话号码有效
  • 你错过了其他行星..
  • 在我的国家,他们没有。另外,可能还有国际前缀。或扩展名。根据国家/地区的不同,数字组会以空格、点或破折号分隔。尔格:验证取决于文化,并不像你想象的那么简单。
  • 这是澳大利亚电话号码、英国号码、国际号码等吗?验证来自世界各地的电话号码比验证电子邮件更容易引发蠕虫 - 我认为我从未见过 100% 可靠。
  • 最好的解决方案是使用 libphonenumber,它是 Google 的 libphonenumber 到 PHP github.com/giggsey/libphonenumber-for-php的端口

标签: php regex


【解决方案1】:

以下是我查找有效 10 位数美国电话号码的方法。在这一点上,我假设用户想要我的内容,所以数字本身是可信的。我在一个最终发送 SMS 消息的应用程序中使用,所以无论如何我只想要原始数字。以后可以随时添加格式

//eliminate every char except 0-9
$justNums = preg_replace("/[^0-9]/", '', $string);

//eliminate leading 1 if its there
if (strlen($justNums) == 11) $justNums = preg_replace("/^1/", '',$justNums);

//if we have 10 digits left, it's probably valid.
if (strlen($justNums) == 10) $isPhoneNum = true;

编辑:如果有人感兴趣,我最终不得不将它移植到 Java。它在每次击键时都会运行,所以我尽量保持轻量:

boolean isPhoneNum = false;
if (str.length() >= 10 && str.length() <= 14 ) { 
  //14: (###) ###-####
  //eliminate every char except 0-9
  str = str.replaceAll("[^0-9]", "");

  //remove leading 1 if it's there
  if (str.length() == 11) str = str.replaceAll("^1", "");

  isPhoneNum = str.length() == 10;
}
Log.d("ISPHONENUM", String.valueOf(isPhoneNum));

【讨论】:

  • 如果输入的号码是+1981878978怎么办
  • @Bugfixer 如果长度为11,它只删除前导1。
  • 能够通过一些改动来使用它。感谢您直接回答。
【解决方案2】:

由于电话号码必须符合某种模式,您可以使用正则表达式将输入的电话号码与您在 regexp 中定义的模式进行匹配。

php 具有 ereg 和 preg_match() 函数。我建议使用 preg_match() 因为有更多关于这种风格的正则表达式的文档。

一个例子

$phone = '000-0000-0000';

if(preg_match("/^[0-9]{3}-[0-9]{4}-[0-9]{4}$/", $phone)) {
  // $phone is valid
}

【讨论】:

  • 以及在区号周围加上括号的人? (202) 555 1212
  • 强制使用特定的格式约定是疯狂的。您还需要处理国际拨号前缀。
  • 那应该是 preg_match 中间的 {3} 吧?不是{4}。至少对于美国电话号码而言。
  • 这不是电话号码的完整正则表达式。电话号码的格式有很多种,尤其是国际号码。
  • 根据他们的工作,他们可能不需要国际支持。
【解决方案3】:

我在很大程度上取决于您要支持的数字格式,以及您希望执行数字分组的严格程度、空格和其他分隔符的使用等......

查看this similar question 以获得一些想法。

然后是E.164,这是ITU-T推荐的编号标准

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    相关资源
    最近更新 更多