добавив отрицательное утверждение в регулярное выражение

Я пытаюсь проверить, существует ли такой номер телефона при использовании регулярных выражений.

(001) 33992292

Итак, я использовал

if(preg_match("/[0-9\(\)]+/", $row)){
//is phone number
}

Но проблема в том, что строки, содержащие числа, также передаются, как [email protected], так как я могу оценить номер телефона и исключить @ характер строки все вместе?

1

Решение

UDPATED
/^(\(\d+\))*\s?(\d+\s*)+$/

вы пропустили стартовую строку ^ знак и конец строки $ знак, что еще ваше регулярное выражение не так
потому что 5545 () 4535 также пройдет матч

1

Другие решения

Вам нужно использовать анкеры в вашем регулярном выражении правильный синтаксис будет:

if(preg_match('~^\(\d{3}\) *\d{8}$~', $row)) { ... }
1

Телефонные номера печально известны тем, что люди ошибаются, и под людьми я имею в виду программистов.

Например, все это «обычные» способы написания номера телефона:

(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
}
1
По вопросам рекламы [email protected]