如何验证英国电话号码?我复制了这个网站的答案,但这个答案只接受手机号码。我想接受座机和手机号码。有可能吗?
# @reference: http://stackoverflow.com/questions/8099177/validating-uk-phone-numbers-in-php
$telephone = "01752311149"; // not ok.
$telephone = "07742055388"; // ok.
$pattern = "/^(\+44\s?7\d{3}|\(?07\d{3}\)?)\s?\d{3}\s?\d{3}$/";
if (!preg_match($pattern, $telephone))
{
$error = true;
$message.='<error elementid="telephone" message="invalid" />';
}
我已尝试使用此正则表达式,但它根本不起作用,
#http://stackoverflow.com/questions/14512810/regular-expression-mobile-and-landline-number
$pattern = "/^\(0\d{1,2}\)\d{3}-\d{4}$/";
答案 0 :(得分:2)
在Regular Expressions for Validating and Formatting GB Telephone Numbers验证电话号码有一系列正则表达式:
或者,RegExLib.com处的一个似乎运作良好:
^((\(44\))( )?|(\(\+44\))( )?|(\+44)( )?|(44)( )?)?((0)|(\(0\)))?( )?(((1[0-9]{3})|(7[1-9]{1}[0-9]{2})|(20)( )?[7-8]{1})( )?([0-9]{3}[ -]?[0-9]{3})|(2[0-9]{2}( )?[0-9]{3}[ -]?[0-9]{4}))$
修改强>
这将允许移动,固定电话和特殊服务号码(999,123等) - 假设空格已被剥离:
'/^(?>(?>\+44|0)(?>(?!7624)(?>[12389]\d|5[56]|7[06])\d{8}|(?>(?>[58]00|1\d{2})\d{6})|(?>8001111|845464\d)|7(?>[45789]\d{8}|624\d{6}))|999|112|100|101|111|116|123|155|118\d{3}|(?>\+44|0)(?>800111|8454647))$/D'
答案 1 :(得分:1)
您最好使用现有的库,而不是尝试自己的验证,因为规则有些复杂,可能会随着时间而变化。
例如,Google PHP version的libphonenumber:
$phoneUtil = PhoneNumberUtil::getInstance();
try {
$numberProto = $phoneUtil->parse('02012345678', 'GB');
} catch (NumberParseException $e) {
echo $e;
}
然后您可以使用以下方法检查号码的有效性:
$phoneUtil->isValidNumber($numberProto);
此外,此库允许您检测电话号码类型(固定电话,移动电话,voip等)