Если вы поддерживаете только американские номера, вы можете просто отформатировать цифры, чтобы показать скобки и х, где вы хотите.
Я бы предпочел сохранить всю строку, я бы проанализировал ее с помощью регулярного выражения для проверки, а затем сохранил бы ее в нормализованной строке.
Чтобы заставить его принять любую страну, я бы сделал это:
Я бы добавил код IDD ко всем телефонным номерам, а затем скрыл бы его от пользователей из этой страны.
так: (123) 456-7890 x1234 будет храниться как +1 (123) 456-7890 x1234
(Perl-совместимое) регулярное выражение будет что-то вроде (полностью не проверено и не будет работать):
?
(+ \ D +) \ S + (((\ г {, 3})) (\ S + ([-. 0-9] {6}) \ S + ((х | внутр \ ш *) \ д {,} 4)
- Это необязательное количество цифр, которым предшествует +
- После одного или нескольких пробелов
- Затем необязательная группа до 3 цифр в скобках
- Тогда один или несколько пробелов
- Затем группа из 6 или более цифр, тире или точек
- Тогда один или несколько пробелов
- Затем необязательный x или слово, начинающееся с ext (ext, extension ...) и группа до 4 цифр
У меня была бы база данных пользователей, включая код страны и города, а затем автоматически их заполнять, если они отсутствуют, для страны будет применяться соглашение о группировке цифр по умолчанию для телефонных номеров (3,4 для нас).
- Таким образом, если вы находитесь в области 123 в США и введите 456.7890, он будет проанализирован как +1 (123) 4567890, и вы увидите его только как 456-7890
- если вы находитесь в Катаре и вводите номер 4444555 extenshn 33, он сохраняется как +974 4444555 x33, вы увидите его как 4444555 x33
Международный код не будет отображаться для пользователей в одной и той же стране, а код города не будет отображаться для пользователей в той же стране и коде города. Полный номер будет отображаться на mooover (метка HTML?)