Вы изучили использование Инверсия Управления контейнер? Я использую замок Windsor с внешним файлом Шиканья, который позволяет мне легко расширить applcation, не имея необходимость перекомпилировать или волноваться о предоставлении зависимостей
Я бы сохранил исходный введенный беспорядок, но также вставил бы очищенную форму в базу данных. Что только сохранило в цифрах меньше знаков препинания и пробелов. Использование очищенной формы позволит легко выполнять поиск, не беспокоясь о различных возможных введенных стилях.
Сохраните его, как вам удобнее, но преобразуйте в удобочитаемый формат, прежде чем показывать его пользователю. И, пожалуйста, не заставляйте пользователей вводить номера телефонов в выбранном вами формате, позвольте им просто вводить его, как им нравится.
Вот как я это делаю.
Какая у вас база пользователей?
Если они будут иметь географические ограничения (например, только для США), и вы собираетесь строго проверять числа, то отформатируйте их канонически. - т. е. удалите любое использованное ими форматирование (например, точки между числами ...) и вставьте тире (не проваливайте проверку, если они не придерживаются вашего форматирования ... это просто означает). Я бы также сохранил эту очищенную версию в базе данных, а не вырезанный номер; это немного упрощает вашу жизнь при создании пользовательских отчетов и т. д.
Если у вас могут быть пользователи / номера со всего мира, может быть лучше сохранить используемое ими форматирование. Также не забывайте, что иногда жители США в настоящее время путешествуют и используют иностранный номер: не блокируйте их непреднамеренно.
В любом случае: убедитесь, что вы НЕ определяете столбец как числовой или не делаете его слишком маленьким. Международные номера с форматированием могут содержать более 16 символов.
Великобритания - особый случай, поскольку у нас есть коды STD (зоны) переменной длины и сам номер абонента переменной длины. Чем длиннее код STD, тем короче номер. Подобная система существует в Германии и некоторых других странах.
В большинстве случаев номера состоят из 10 цифр после префикса магистральной линии 0 (междугороднего), но несколько десятков областей также имеют примерно 9-значные номера.
Помните, что номера 0800 могут иметь разную длину, например 0800 567 1234 или 0800 234 456. г. 0800 567 1234 или 0800 234 456. г. 0800 567 1234 или 0800 234 456. Старые номера 0500 также на цифру короче, например 0500 456 456.
Кроме того, некоторые люди любят группировать свои номера 234 234, в то время как другие используют 23 23 23 (в зависимости от фактических цифр).
Есть аргументы в пользу сохранения как введено и сохраняется в единой форме:
Если вы сохраняете число как последовательность чисел, вы можете выводить его любым способом, либо принимая во внимание предпочтения пользователя или их языковой стандарт и разделяя число в соответствии с в «правила» (какими бы они ни были).
Если вы сохраняете введенные значения, вы всегда будете отображать их так, как ожидает пользователь, но вам нужно будет вырезать нечисловые значения перед их использованием, что часто может быть дорогим.
Основная трудность при канонизации телефонных номеров - это определение правильного канонического формата. В разных странах используются разные способы группировки номеров, а внутри страны разные номера могут быть сгруппированы по-разному.
Раньше (когда-то десять или более лет назад) в Великобритании было 01-234-2345, 021-234-1234, 0334-234234, даже 092324-213; Сейчас в Великобритании все по-другому - обычно больше цифр, и я больше не уверен в группировках (отсутствие делает знания менее актуальными).
Работа с префиксами страны и указание префикса внутреннего набора страны - это весело: +44 (0) 1394-726629 - это номер для Великобритании, код страны 44; набирая номер из-за пределов Великобритании, опустите 0; При наборе номера внутри Великобритании не включайте международный префикс, но обязательно укажите 0. Обратите внимание, что форма с (0) в ней фактически недействительна, если вы следуете стандарту E.123.
Это похоже на проблема канонизации почтовых адресов - не такая сложная, но все же плохая.
Кроме того, как отмечалось в моем комментарии к ответу HeavyWave, заставлять людей вводить номер телефона в виде строки цифр без знаков препинания неприятно. Это нормально хранить в таком виде; просто представьте данные в удобочитаемом формате. Слишком много ленивого программирования веб-форм.
набирая номер из-за пределов Великобритании, опустите 0; при наборе номера внутри Великобритании не включайте международный префикс, но обязательно укажите 0. Обратите внимание, что форма с (0) в ней фактически недействительна, если вы следуете стандарту E.123.Это похоже на проблема канонизации почтовых адресов - не такая сложная, но все же плохая.
Кроме того, как отмечалось в моем комментарии к ответу HeavyWave, заставлять людей вводить номер телефона в виде строки цифр без знаков препинания неприятно. Это нормально хранить в таком виде; просто представьте данные в удобочитаемом формате. Слишком много ленивого программирования веб-форм.
набирая номер из-за пределов Великобритании, опустите 0; При наборе номера внутри Великобритании не включайте международный префикс, но обязательно укажите 0. Обратите внимание, что форма с (0) в ней фактически недействительна, если вы следуете стандарту E.123.Это похоже на проблема канонизации почтовых адресов - не такая сложная, но все же плохая.
Кроме того, как отмечалось в моем комментарии к ответу HeavyWave, заставлять людей вводить номер телефона в виде строки цифр без знаков препинания неприятно. Это нормально хранить в таком виде; просто представьте данные в удобочитаемом формате. Слишком много ленивого программирования веб-форм.
Это похоже на проблему канонизации почтовых адресов - не такая сложная, но все же плохая.
Кроме того, как отмечалось в моем комментарии к ответу HeavyWave, люди заставляют людей вводить номер телефона в виде строки цифр без знаков препинания. противно. Так хранить можно; просто представьте данные в удобочитаемом формате. Слишком много ленивого программирования веб-форм.
Это похоже на проблему канонизации почтовых адресов - не такая сложная, но все же плохая.
Кроме того, как отмечалось в моем комментарии к ответу HeavyWave, люди заставляют людей вводить номер телефона в виде строки цифр без знаков препинания. противно. Так хранить можно; просто представьте данные в удобочитаемом формате. Слишком много ленивого программирования веб-форм.
Обычно я предпочитаю сохранять номер в вырезанном виде, а затем форматировать его для отображения. Поскольку я обычно не создаю приложения для использования во всем мире, мне обычно не нужно беспокоиться о формате. Но в случае приложения для использования во всем мире я, вероятно, создал бы модуль форматирования, который форматирует в соответствии с локалью телефонного номера.
Мой инстинкт состоит в том, чтобы канонизировать в соответствии с местными стандартами сущности, а затем визуализировать юзабилити модуля канонического представления.
Проверить ввод, но разрешить широкий спектр форматов. Сохраните его в том виде, в каком он был введен пользователем, а затем переформатируйте вывод по мере необходимости.
Допустим, пользователь набрал свой номер во время регистрации в приложении общедоступной телефонной книги. Например, я бы отобразил его «как пользователь набрал» в текстовом поле на его странице «Изменить мой профиль». Но я бы отобразил его в стандартном формате в списке телефонной книги общедоступных пользователей.
Store the number in a canonical format and the display format mask.
Gains:
Pains: