我使用Google的libphonenumber的PHP端口创建了一个表单验证程序,以便在向用户发送短信之前检查输入的手机号码是否有效。
问题是我需要允许用户以两种方式输入数字。可以是没有国家/地区代码的号码,也可以是国家/地区代码:
07700000000
+447700000000
当用户输入07700000000
时,我需要将其与国家/地区代码相匹配。
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如何做呢?
答案 0 :(得分:2)
我可能错了,但我非常怀疑这是否可能主要是因为法律问题(我认为反向检查不起作用)。我认为你可以设法解决这个问题的一种方法是在要求用户写下他们的电话号码时要求原籍国。
类似于电话号码输入字段之前的国家/地区下拉菜单,在后端,您可以根据所选国家/地区添加前缀来构建完整的电话号码。
此外,为了确保他们不选择国家/地区,然后记下前缀,请使用一些正则表达式,最多10位数字或类似内容验证电话号码字段。
我希望这会有所帮助,如果我找到更好的东西,我会及时通知您。干杯!
答案 1 :(得分:0)
每个国家/地区都有不同的代码 例如美国和加拿大是+1俄罗斯是+7,但法国是+33,亚美尼亚是+374 因此,每个国家/地区都有不同的号码,并且有些国家/地区的区号相同,因此很容易保存国家/地区代码和区域代码,以便了解哪个国家/地区。