我的任务是验证用户在我的网站上引入的电话号码(存储在var $号码中)
$number = $_POST["telephone"];
事情是这个验证非常复杂,因为我必须验证数字,看它是否来自葡萄牙。我考虑使用来自葡萄牙的所有指标进行验证,这些指标为52 :( 50个指标长3位,2个指标长2位)数字示例:
254872272(254为指标)
我还想过制作一个包含所有指标的数组,然后以某种方式使用循环验证,如果前2/3数字等于数组中的数字。
你觉得怎么样?我该如何解决这个问题?答案 0 :(得分:1)
一种方法是使用带有命名子模式的正则表达式:
$number = 254872272;
$ind = array( 251, 252, 254 );
preg_match( '/^(?<ind>\d{3})(?<rest>\d{6})$/', $number, $match );
if ( isset($match['ind']) && in_array( (int) $match['ind'], $ind, true ) ) {
print_r( $match );
/*
Array
(
[0] => 254872272
[ind] => 254
[1] => 254
[rest] => 872272
[2] => 872272
)
*/
}
或者您可以将指标直接插入正则表达式:
preg_match( '/^(?<ind>251|252|254)(?<rest>\d{6})$/', $number, $match );
答案 1 :(得分:0)
也许正则表达式?
我没有测试过以下内容,但应检查其中一个匹配指标,后跟任意6位数字,如:
$indicators = array('123' ,'456', '78'); // etc...
$regex = '/^(' . implode('|', $indicators) . ')[0-9]{6}$/';
if(preg_match($regex, 'your test number')) {
// Run further code...
}
答案 2 :(得分:0)
有一种潜在的REGEX方式可以“解决”这个问题,但实际上,您需要的只是in_array()
,并且您的指标位于array
。例如:
$indicators = array('254', '072', '345');
$numbers = array(
'254872272',
'225872272',
'054872272',
'072872272',
'294872272',
'974872272',
'345872272'
);
while ($number = array_shift($numbers)) {
$indicator = substr($number, 0, 3);
if (in_array($indicator, $indicators)) {
echo "$number is indicated ($indicator).\n";
} else {
echo "$number is NOT indicated ($indicator).\n";
}
}
这给出了:
254872272 is indicated (254).
225872272 is NOT indicated (225).
054872272 is NOT indicated (054).
072872272 is indicated (072).
294872272 is NOT indicated (294).
974872272 is NOT indicated (974).
345872272 is indicated (345).
另外,我故意使用字符串而不是整数,因为PHP会将任何以0
开头的数字(如0724445555
)解释为没有前导零,所以你需要使用一个字符串,以确保正常工作。
答案 3 :(得分:0)
有几个图书馆的目的是根据有关当局的定义,根据实际验证格式验证尽可能多的电话号码格式。
它们通常基于Google的库,并且有versions for PHP。