【发布时间】: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