У меня есть номера телефонов, которые я хочу отформатировать
И у меня есть шаблон сопоставления, который разбивает числа в 10-значный формат, а затем применяет тире.
Это работает большую часть времени. Однако у меня возникли проблемы с определенными номерами.
$trimmed = trim(preg_replace('/\s+/', '', $v->cust_num));
$tendigit = str_replace(array( '(', ')','-',' ' ), '', $trimmed);
$num = substr($tendigit,0,3)."-".substr($tendigit,3,3)."-".substr($tendigit,6,4);
Это изменит (555) 555 5555 или 555-555 5555 или 5555555555 или (555) -555-5555 или 555-555-5555
в мой формат 555-555-5555
Тем не менее, я наткнулся на несколько записей в моей базе данных, которые, похоже, не хотят меняться.
Это одна из плохих записей. Он содержит два пробела перед 4.
4-035-0100
Когда он проходит через $ trimmed, и я вывожу $ tendigit … он выводит
40350100
как и ожидалось. Но потом, когда я применяю $ num к нему. Это восходит к
4-035-0100
Я бы по крайней мере ожидал, что это будет
403-501-00
Кажется, в нем есть какие-то скрытые пробелы, что мои preg_replace, trim и str_replace не атакуют.
Есть идеи??
Спасибо
Приведенный ниже код работает, я пробовал его с помощью специальных символов, которые мы обнаружили в комментариях. По сути, регулярное выражение удаляет все, что не является числом (0-9), а затем использует исходное форматирование.
$trimmed = preg_replace('/\D+/', '', $v->cust_num);
$num = substr($trimmed,0,3)."-".substr($trimmed,3,3)."-".substr($trimmed,6,4);
Вы можете немного сжать свой код:
$tendigit = preg_replace('/[^\d]/', '', $v->cust_num);
$num = substr($tendigit,0,3)."-".substr($tendigit,3,3)."-".substr($tendigit,6,4);
Тем не менее, вы должны добавить некоторые условия, чтобы проверить, что номер телефона на самом деле тоже имеет 10 цифр:
$tendigit = preg_replace('/[^\d]/', '', $v->cust_num);
if(strlen($tendigit == 10)){
$num = substr($tendigit,0,3)."-".substr($tendigit,3,3)."-".substr($tendigit,6,4);
} else {
// catch your error here, eg 'please enter 10 digits'
}
Первая строка удаляет все «не цифры» [^ \ d].
Условный оператор проверяет, содержит ли переменная $ tendigit 10 цифр.
Если это так, то он использует ваш код для анализа и форматирования.
Если это не так, то вы можете поймать ошибку.