首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅验证美国的电话号码

仅验证美国的电话号码
EN

Stack Overflow用户
提问于 2014-09-26 20:50:43
回答 2查看 2.8K关注 0票数 0

我目前正在建立一个网站,在PHP,用户将能够通过短信互动。因此,我需要将他们的电话号码存储在我的数据库中。由于我现在只允许在美国的短信互动,我需要检查提交的电话号码是否符合美国格式。一般来说,这意味着一些事情:1必须是第一个数字,区号不能以01开头,没有前导1的字符串必须是10位(3位区号加7位数字)。

尽管有所有这些要求,我希望用户可以自由地以他们喜欢的任何格式输入他们的号码,而不会造成错误。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-26 21:16:34

忽略非数字是第一步.并不是所有的电话公司,特别是新泽西附近的电话公司都需要领先的1。在那里拨它会导致错误或错误的号码。

区号不能是2-911或2-990-9.以9为中心数字的区号保留给尚未确定的解决区号耗尽问题的方案。

交易所也不能以0或1开头,也不能是2-911.

这些限制用以下代码表示:

代码语言:javascript
复制
$mobile = preg_replace ('/\D/', '', $trimmed['mobile']);

if ($mobile[0] == '1') $mobile = substr ($mobile, 1);  // remove prefix

$invalid = strlen ($mobile) != 10  ||
           preg_match ('/^1/',      $mobile) ||  // ac start with 1
           preg_match ('/^.11/',    $mobile) ||  // telco services
           preg_match ('/^...1/',   $mobile) ||  // exchange start with 1
           preg_match ('/^....11/', $mobile) ||  // exchange services
           preg_match ('/^.9/',     $mobile);    // ac center digit 9
票数 2
EN

Stack Overflow用户

发布于 2014-09-26 20:50:43

在我从搜索和搜索中学到了什么之后,我找不到一个美国唯一的方法。所以,这是我设计的:

首先,要允许任何输入格式,请使用preg_replace删除所有非数字字符.用户可以使用他们想要的任何连字符或斜线,但他们对我没有用。

代码语言:javascript
复制
$mobile = preg_replace('/\D/', '', $trimmed['mobile']);

只要使用一个纯粹的数字字符串,就可以消除任何领先的1--这可以处理用户包含前导1的任何实例,或者他们用1启动区号的地方。如果有效,这应该总是给我留下一个10数字字符串。

代码语言:javascript
复制
$mobiletrim = ltrim($mobile, '1');

接下来,regex检查修剪后的电话号码是否精确地是10数字,并且不以01开头。

代码语言:javascript
复制
    if (preg_match ('/^[2-9]\d{9}$/', $mobiletrim) || empty($trimmed['mobile'])) {
        $mp = TRUE;
        if (!empty($trimmed['mobile'])) { $mobiletrim = "1" . $mobiletrim; }
    } else {
        $profile_errors[] = "Please enter a valid U.S. phone number.";
    }
if ($mp) { //Store Phone Number in db }

最后一步,您可以在上面看到,是在数据库中存储有效的号码之前添加前面的1,前提是用户没有提交空的电话字段,如果他们不想存储自己的号码,他们就会这样做。

从技术上讲,这将验证所有NANP数字。将其从NANP缩小到美国的唯一方法是通过分析当前美国地区代码列表来验证美国区号是否被使用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26068100

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档