У меня есть некоторые проблемы, соответствующие номеру телефона с этой функцией
return (bool)preg_match( '/^[\-+]?[0-9]+$/', $num);
Вышеуказанная функция всегда возвращает false после снятия скобок ( )
и тире -
слева – +1234567890
что мне не хватает
Тест Здесь: https://eval.in/84659
$p = '/[\-+]?[0-9]+$/'; $num ='+1234567890'; echo preg_match( $p, $num)." "; $num1 ='+1234567890d'; echo preg_match( $p, $num1)." "; $num1 ='-1234567890'; echo preg_match( $p, $num1)." ";
ВЫВОД:
1 0 1
Вероятно, в строке есть пробелы. Попробуйте использовать обрезку
return (bool)preg_match( '/^[\-+]?[0-9]+$/', trim($num));
Только для телефонов Северной Америки вы можете использовать это
^(?:(?:\+?1\s*(?:[.-]\s*)?)?(?:\(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])\s*\)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?)?([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+))?$