Существует ли стандарт для хранения нормализованных номеров телефона в базе данных?

Если вы ищете очень простую реализацию. (Это работало для меня в Swift 2)

 let imageURL = NSURL(string: "https://farm2.staticflickr.com/1591/26078338233_d1466b7da2_m.jpg")
 let imagedData = NSData(contentsOfURL: imageURL!)!
 imageView?.image = UIImage(data: imagedData)

Я реализовал в представлении таблицы с пользовательской ячейкой, которая имеет только изображение

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{

        let cell = tableView.dequeueReusableCellWithIdentifier("theCell", forIndexPath: indexPath) as! customTableViewCell

        let imageURL = NSURL(string: "https://farm2.staticflickr.com/1591/26078338233_d1466b7da2_m.jpg")

        let imagedData = NSData(contentsOfURL: imageURL!)!

        cell.imageView?.image = UIImage(data: imagedData)

        return cell

    }
90
задан Sid M 14 July 2014 в 08:19
поделиться

15 ответов

Во-первых, вне кода страны, нет никакого реального стандарта. О лучшем можно сделать, распознают, кодом страны, какая страна конкретный номер телефона принадлежит и соглашение с остальной частью числа согласно тому национальному формату.

Обычно однако, телефонное оборудование и такой стандартизированы так, можно почти всегда повреждать данный номер телефона в следующие компоненты

  • Код страны C 1-10 цифр (прямо сейчас 4 или меньше, но это может измениться)
  • Код зоны А (Область/состояние/регион) код 0-10 цифр (может на самом деле хотеть поле региона и поле области отдельно, а не один код зоны)
  • , Exchange E (префикс или переключатель) кодируют 0-10 цифр
  • цифры Номера строки 1-10 L

С этим методом, можно потенциально разделить числа, таким образом, что можно найти, например, людей, которые могли бы быть друг близко к другу, потому что у них есть та же страна, область и коды станций. С сотовыми телефонами, который больше не является чем-то, которое можно рассчитывать все же.

Далее, в каждой стране там отличаются стандарты. Можно всегда зависеть от (AAA) EEE-LLLL в США, но в другой стране у Вас могут быть обмены в городах (AAA) LLL EE и просто номера строки в сельских районах (AAA) LLLL. Необходимо будет запустить наверху в дереве некоторой формы и отформатировать их, поскольку у Вас есть информация. Например, код страны 0 имеет известный формат для остальной части числа, но для кода страны 5432 Вы, возможно, должны были бы исследовать код зоны перед пониманием остальной части числа.

можно также хотеть обработать vanity числа такой как (800) Lucky-Guy, который требует распознавания, что, если это - американское число, существует слишком много цифр (и Вам, возможно, понадобится к полному представлению для рекламы или других целей), и что в США буквы отображаются на числа по-другому, чем в Германии.

можно также хотеть сохранить все число отдельно как текстовое поле (с интернационализацией), таким образом, можно возвратиться позже и повторно проанализировать числа, когда вещи изменяются, или как резервное копирование в случае, если кто-то отправляет плохой метод для парсинга формата конкретной страны и теряет информацию.

76
ответ дан Adarath 24 November 2019 в 07:02
поделиться

Где Вы получаете номера телефона от? Если Вы получите их от части телефонной сети, Вы получите строку цифр и типа числа и плана, например,

441234567890 типов/планов 0x11 (что означает международный E.164)

В большинстве случаев, лучшая вещь сделать состоит в том, чтобы сохранить все их, как они и нормализуют для дисплея, хотя нормализованные числа хранения могут быть полезными, если Вы хотите использовать их в качестве уникального ключа или подобный.

0
ответ дан Mark Baker 24 November 2019 в 07:02
поделиться

Я пошел бы для freetext поля и поля, которое содержит чисто числовую версию номера телефона. Я оставил бы представление номера телефона пользователю и использовал бы нормализованное поле специально для сравнений номера телефона в основанных на TAPI приложениях или при попытке найти двойные записи в телефонном каталоге. Конечно, это не повреждает предоставление пользователю со схемой записи, которая добавляет аналитику как отдельные поля для кода страны (при необходимости), кода зоны, основания системы счисления и расширения.

0
ответ дан 24 November 2019 в 07:02
поделиться

Что относительно того, чтобы хранить freetext столбец, который показывает удобную для пользователя версию номера телефона, затем нормализованная версия, которая удаляет пробелы, скобки и расширяется '+'. Например:

Удобный для пользователя: +44 (0) 181 4642542

Нормализованный: 00441814642542

1
ответ дан Sid M 24 November 2019 в 07:02
поделиться

Я нахожу, что большинство веб-форм правильно допускает код страны, код зоны, тогда оставление 7 цифрами, но почти всегда забывает позволять запись расширения. Это почти всегда заканчивает тем, что заставило меня произнести сердитые слова, с тех пор на работе у нас нет регистратора, и мое расширение # необходимо для достижения меня.

1
ответ дан Aaron 24 November 2019 в 07:02
поделиться

я нахожу, что большинство веб-форм правильно допускает код страны, код зоны, тогда оставление 7 цифрами, но почти всегда забывает позволять запись расширения. Это почти всегда заканчивает тем, что заставило меня произнести сердитые слова, с тех пор на работе у нас нет регистратора, и мое расширение # необходимо для достижения меня.

я должен был бы проверить, но я думаю, что наша схема DB подобна. Мы держим код страны (он мог бы принять значение по умолчанию в США, не уверенные), код зоны, 7 цифр и расширение.

1
ответ дан Thomas Owens 24 November 2019 в 07:02
поделиться

Я использовал 3 различных способа сохранить номера телефона в зависимости от требований использования.

  1. , Если число хранится только для человеческого извлечения и не будет использоваться для поиска его сохраненного в поле строкового типа точно, поскольку пользователь ввел его.
  2. , Если поле будет искавшим на тогда любых дополнительных символах, такой как +, пробелы и скобки и т.д. удалены, и остающееся число хранится в поле строкового типа.
  3. Наконец, если бы номер телефона будет используемым компьютером/телефонным приложением, то в этом случае он должен был бы быть введен и сохранен как действительный телефонный номер, применимый системой, эта опция, конечно, будучи самым твердым для кодирования для.
0
ответ дан Sid M 24 November 2019 в 07:02
поделиться

Я думаю, что произвольный текст (возможно, varchar (25)) является наиболее широко используемым стандартом. Это будет допускать любой формат, или внутренний или международный.

я предполагаю, что основной ведущий фактор может быть то, как точно Вы запрашиваете эти числа и что Вы делаете с ними.

1
ответ дан Don 24 November 2019 в 07:02
поделиться

Возможно, хранение номера телефона разделяет в различных столбцах, допуская пустые или пустые записи?

3
ответ дан Thomas Owens 24 November 2019 в 07:02
поделиться

Хорошо, таким образом, на основе информации на этой странице, вот запуск на блоке проверки допустимости международного телефонного номера:

function validatePhone(phoneNumber) {
    var valid = true;
    var stripped = phoneNumber.replace(/[\(\)\.\-\ \+\x]/g, '');    

    if(phoneNumber == ""){
        valid = false;
    }else if (isNaN(parseInt(stripped))) {
        valid = false;
    }else if (stripped.length > 40) {
        valid = false;
    }
    return valid;
}

Свободно на основе сценария от этой страницы: http://www.webcheatsheet.com/javascript/form_validation.php

3
ответ дан 2 revs 24 November 2019 в 07:02
поделиться

Ищите E.164. В основном Вы храните номер телефона как код, запускающийся с префикса страны и дополнительного суффикса АТС. Дисплей является тогда проблемой локализации. Проверка может также быть сделана, но это - также проблема локализации (на основе префикса страны).

, Например, +12125551212+202 был бы отформатирован в en_US локали как (212) 555-1212 x202. Это имело бы другой формат в en_GB или de_DE.

существует довольно мало информации там о ITU-T E.164, но это довольно загадочно.

7
ответ дан Sid M 24 November 2019 в 07:02
поделиться

Мне лично нравится идея сохранить нормализованный varchar номер телефона (например, 9991234567) тогда, конечно, форматируя тот номер телефона, встроенный, поскольку Вы отображаете его.

Этот путь все данные в Вашей базе данных являются "чистыми" и свободными от форматирования

6
ответ дан Mike Fielden 24 November 2019 в 07:02
поделиться

Страница Wikipedia на E.164 должна сказать Вам все, что необходимо знать.

21
ответ дан Rich 24 November 2019 в 07:02
поделиться

Вот моя предложенная структура, я ценил бы обратную связь:

телефонное поле базы данных должно быть varchar (42) со следующим форматом:

CountryCode - Расширение Номер x

Так, например, в США, мы могли иметь:

1-2125551234x1234

Это представило бы американское число (код страны 1) с кодом зоны/числом (212) 555 и расширений 1234 года 1234.

Выделение кода страны с тире ясно дает понять код страны кому-то, кто просматривает данные. Это не строго необходимо, потому что коды страны" коды префикса " (можно считать их слева направо, и Вы всегда будете в состоянии однозначно определить страну). Но, так как коды страны имеют переменные длины (между 1 и 4 символами в данный момент), Вы не можете легко сказать сразу код страны, если Вы не используете своего рода разделитель.

я использую "x" для разделения расширения, потому что иначе действительно не было бы возможно (во многих случаях) выяснить, который был числом и который был расширением.

Таким образом можно сохранить все число, включая код страны и расширение, в поле единой базы данных, которое можно тогда использовать для ускорения запросов, вместо того, чтобы присоединиться на пользовательской функции, как Вы мучительно делали до сих пор.

, Почему я выбирал varchar (42)? Ну, прежде всего международные телефонные номера будут иметь варьировавшиеся длины, следовательно "var". Я храню тире и "x", так, чтобы объяснил "символ", и так или иначе, Вы не будете делать целочисленной арифметики по номерам телефона (я предполагаю), таким образом, имеет мало смысла пытаться использовать числовой тип. Что касается длины 42, я использовал максимальную возможную длину всех сложенных полей, на основе ответа Adam Davis, и добавил 2 для тире и 'x".

8
ответ дан unintentionally left blank 24 November 2019 в 07:02
поделиться

KISS - я устаю от многих американских веб-сайтов. У них есть некоторый умно записанный код для проверки индексов и номеров телефона. Когда я ввожу свою совершенно допустимую норвежскую контактную информацию, я нахожу, что довольно часто она отклоняется.

Отпуск это строка, если у Вас нет некоторой определенной потребности в чем-то более усовершенствованном.

55
ответ дан Bjorn Reppen 24 November 2019 в 07:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: