使用特定规则验证手机号码

时间:2017-08-05 19:22:04

标签: php validation mobile

我正在努力找出验证手机号码的最佳方法。问题是我必须将此号码插入外部系统,目前有些东西导致它失败。我在前端有一些基本的验证,确保它小于20,并且可以包含数字,+, - 和()。虽然我正在验证移动设备,但移动设备可能位于任何国家/地区,这就是我允许其他一些角色的原因。

问题是,除了+之外的这些附加字符不能插入到这个外部系统中(尽管它们在我自己的数据库中使用)。首先,我删除它们

$phone = str_replace([' ', '-', '(', ')'], '', $this->mobile);

下一条规则是,如果是英国号码,则从提供的号码中删除起始号

if (substr($phone, 0, 4) === '+440') {
    $this->mobile = str_replace('+440', '+44', $phone);
}

所以,如果此时一切都很好,我知道英国号码的长度为13个字符(加上+44并删除0后)

为了处理不同的情况(他们没有使用+44,或者它是国际手机)我添加了以下内容

if (strlen($phone) !== 13) {
    $lastTen = substr($phone, -10);
    $prefix = substr($phone, 0, 3);
    if($prefix === '+44') {
        $this->mobile = $prefix . $lastTen;
    } elseif (substr($phone, 0, 1) === '+') {
        $this->mobile = $phone;
    } else {
        $this->mobile = '+44' . $lastTen;
    }
}

因此,如果长度不是13个字符,我会选择最后十个和前三个字符。如果它开始+44,我将最后10个附加到此。我这样做的原因是我注意到很多时候人们似乎重复自己,例如+ 447711 + 447711222222(+44对数字主体有一个单独的输入字段)

如果它以加号开头,但不是+44,我认为它是一个国际号码,所以我不碰它。

如果它没有以加号开头,我只取最后10个并将其附加到+44(大多数情况下它将是英国数字)

所以目前的工作正常,但有些情况下额外的优势会使它成为最终的字符串。

我真的在考虑如何清理更多东西,并确保字符串开头只有一个加号?

由于

0 个答案:

没有答案