Я нахожусь в процессе создания приложения callcenter (оно управляет очередями контактной информации для группы распределенных абонентов для связи), и в архитектуре указано одно поле, без пробелов, тире и т. Д. После небольшого анализаЯ согласен, что это кажется лучшим.
Основываясь на изменчивости ввода телефонных номеров (апострофы, точки, тире и комбинации каждого), я создал простую функцию, которая обрабатывает ввод пользователя, удаляя все, кромесами числа, а также «перестройщик», который преобразовывает необработанное число в нечто, более привлекательное для пользователя.
Так как они были полезны для меня, вот что я написал до сих пор:
public static function cleanPhoneNumbers($input) {
return preg_replace("/[^0-9]/", "", $input);
}
public static function formatPhoneNumbers($phone_number) {
if(strlen($phone_number) == 7) {
return preg_replace("/([0-9]{3})([0-9]{4})/", "$1-$2", $phone_number);
} elseif(strlen($phone_number) == 10) {
return preg_replace("/([0-9]{3})([0-9]{3})([0-9]{4})/", "$1-$2-$3", $phone_number);
} else {
return $phone_number;
}
}
Некоторые предостережения: мое приложение сейчас недоступно для международных клиентов (в него встроено приложение voip, которое мы сейчас не хотим разрешать звонить за пределы США), поэтому яНе нашли время, чтобы настроить для международных возможностей.Кроме того, поскольку это происходит, я, вероятно, вернусь к рефакторингу и поддержу эти функции позже.
Я обнаружил одну слабость, которая до сих пор доставляла мне немного боли.В моем приложении я должен запретить звонки по часовому поясу в зависимости от времени суток (например, не разрешать звонить кому-либо на западном побережье в 6:00, когда на востоке 9:00).Для этого мне нужно присоединить отдельную таблицу кодов зоны к моей таблице с телефонными номерами, сравнив трехзначные коды зоны, чтобы получить часовой пояс.Но я не могу просто сравнить почтовый индекс с моим полем номера телефона, потому что они никогда не будут совпадать.Итак, мне приходится иметь дело с дополнительным SQL, чтобы получить только первые три цифры номера.Не изменит правила игры, но, тем не менее, больше работы и путаницы.