Php 从手机号码中提取国家代码

Php 从手机号码中提取国家代码,php,Php,我正在使用Google的PHP端口创建一个表单验证程序,在向用户发送短信之前检查输入的手机号码是否有效 问题是我需要允许用户以两种方式输入数字。不带国家代码或带国家代码的号码: 07700000000 +447700000000 当用户输入0770000000时,我需要将其与国家代码匹配 Facebook就是这样做的。他们允许你注册手机,你可以输入一个没有国家代码的号码。我也在做类似的事情,让用户可以选择使用单个表单元素注册手机或电子邮件。用户可以在单个输入中输入电子邮件或手机 问题是LibP

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

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

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

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

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

这是我的验证器:

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是如何做到的?

每个国家都有不同的代码 例如,美国和加拿大为+1,俄罗斯为+7,但法国为+33,亚美尼亚为+374
因此,每个国家都有不同的数字计数,有些国家的区号相同。保存国家代码和地区代码有时很容易,以确定是哪个国家。

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

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

此外,为了确保他们没有选择country,然后也写下前缀,请使用一些正则表达式、最多10位数字或类似的内容验证电话号码字段


我希望这会有所帮助,如果我找到更好的,我会让你不断更新。干杯

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