Я пытаюсь проверить, существует ли такой номер телефона при использовании регулярных выражений.
(001) 33992292
Итак, я использовал
if(preg_match("/[0-9\(\)]+/", $row)){
//is phone number
}
Но проблема в том, что строки, содержащие числа, также передаются, как [email protected]
, так как я могу оценить номер телефона и исключить @
характер строки все вместе?
UDPATED
/^(\(\d+\))*\s?(\d+\s*)+$/
вы пропустили стартовую строку ^
знак и конец строки $
знак, что еще ваше регулярное выражение не так
потому что 5545 () 4535 также пройдет матч
Вам нужно использовать анкеры в вашем регулярном выражении правильный синтаксис будет:
if(preg_match('~^\(\d{3}\) *\d{8}$~', $row)) { ... }
Телефонные номера печально известны тем, что люди ошибаются, и под людьми я имею в виду программистов.
Например, все это «обычные» способы написания номера телефона:
(001) 33992292
001 33992292
00133992292
001 3399 2292
(001) 3399-2292
Более разумный подход — просто удалить все, что не является числом, и проверить длину:
$phonenumber = "(001) 33992292";
$phonenumber = preg_replace("/[^0-9,.]/", "", $phonenumber );
if (strlen($phonenumber) == 11) {
// do thing
}