【问题标题】:Extracting Country Code From Mobile Number从手机号码中提取国家代码
【发布时间】:2016-11-28 13:36:51
【问题描述】:

我正在使用 Google 的 libphonenumber 的 PHP 端口创建一个表单验证器,以在向用户发送 SMS 之前检查输入的手机号码是否有效。

问题是我需要允许用户以两种方式输入数字。可以是不带国家代码的号码,也可以是带国家代码的号码:

07700000000
+447700000000

当用户输入07700000000 时,我需要将其与国家代码匹配。

Facebook 这样做。它们允许您使用手机注册,并且您可以输入一个没有国家代码的号码。我正在做类似的事情,让用户可以选择使用单个表单元素注册手机或电子邮件。用户可以在单个输入中输入电子邮件或手机。

问题是 LibPhoneNumber 无法从不包含 1 的号码中提取国家代码。

这是我的验证器:

class EmailOrMobile extends AbstractRule {

    public function validate($input)
    {
        $phoneNumberUtil = PhoneNumberUtil::getInstance();

        /*
         * Is the input a valid email address?
         */
        if(v::email()->validate($input))
        {
            return true;
        }

        /*
         * Is the input a valid phone number?
         */
        $phoneNumber = $phoneNumberUtil->parse($input, null);
        if($phoneNumberUtil->isValidNumber($phoneNumber))
        {
            return true;
        }

        return false;
    }
}

当号码与国家/地区代码一起输入时有效,但不输入时无效。

是否可以从手机号码中提取国家代码?如果不是,Facebook 是如何做到的?

【问题讨论】:

  • 只需删除号码的最后 10 位即可。剩下的(如果有的话)就是国家代码。或者检查数字字符串的长度是否大于10,看是否有国家代码。
  • 如果我从07700000000 中删除最后 7 个,这给了我0770。但是英国的国家代码是+44。除非我误解了什么。
  • @BugHunterUK 最后 10 位数字,而不是 7。它将是 0 或 +CC。假设世界上所有的手机号码都是 10 位数。
  • BugHunterUK 正在询问如何从 10 位电话号码(还没有国家/地区前缀)中获取国家/地区,现在如果您从没有前缀的号码中删除 10,您将一无所有
  • @RaulCuth 是的,这就是我想要做的。

标签: php


【解决方案1】:

我可能是错的,但我非常怀疑这可能主要是因为法律问题(我猜反向检查不起作用)。我认为你可以设法做到这一点的一种方法是在要求用户写下他们的电话号码时询问原籍国。

类似于电话号码输入字段之前的国家下拉列表,在后端,您可以根据所选国家/地区添加前缀来构建完整的电话号码。

另外,为了确保他们没有选择国家,然后还记下前缀,请使用一些正则表达式验证电话号码字段,最多 10 位数字,或类似的东西。

我希望这会有所帮助,如果我发现更好的东西,我会及时通知您。干杯!

【讨论】:

    【解决方案2】:

    每个国家/地区都有不同的代码 例如美国和加拿大是 +1 俄罗斯是 +7,但法国是 +33,亚美尼亚是 +374 所以每个国家都有不同的数字计数,并且有些国家的区号相同,有时可以很容易地保存国家代码和区域代码,以了解它是哪个国家。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-12
      • 2013-05-24
      • 1970-01-01
      • 2013-12-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多