Поскольку вы используете preg_match()
, я предполагаю, что вы используете PHP. Для телефонных номеров из-за их изменчивости даже в Н.Ам. (11, 10 или 7 цифр, переменные или не разделяющие символы и т. Д.) С такой функцией проще работать, чем с регулярным выражением:
function validphone(&$value) { //test for N.Am. phone number and reformat in standard format
$valid=false;
$area=NULL;
$working=preg_replace('/\D/', '', $value); //only numbers left, no preceding zeros
switch (strlen($working)) { //cases fall through from 11 to 7
case 11: //e.g. 19024355764
$working=stristr($working,'1'); //trims off 1st 1
case 10: //e.g. 9024355764
$area=substr($working,0,-7);
$working=substr($working,3); //trims off 1st 3
case 7: //e.g. 4355764
$value=implode('-',array($area,substr($working,0,-4),substr($working,-4)));
$valid=true;
break;
default:
$valid=false;
break;
}
return $valid;
}
ЕТА ваши вопросы в комментариях:
У вас есть строка, которая должна быть номером телефона
$phonish='blahblah#._foo(123)4567890 ixlybob';
if(validphone($phonish)){ //function checks if $phonish is valid & reformats it in a standard way
//do something with $phonish, which now equals '123-456-7890'
} else {
echo 'not a valid phone number';
}
Функция validphone()
наиболее подходит для коротких строк, которые, как ожидается, будут телефонными номерами. Если вы сбросите всю страницу в строку, а затем добавите ее к validphone($mywholepage)
, она извлечет все числа в строке за один раз. Таким образом, текст с несколькими телефонными номерами вернет ложь, а текст, который распределен по 11,10 или 7 цифрам, вернет истину.