Подтверждение номера телефона в США

У меня есть форма веб-сайта, которая требует ввода номера телефона в США для последующих целей, и в данном случае это очень необходимо. Я хочу попытаться исключить пользователей, вводящих ненужные данные 330-000-0000. Я видел несколько вариантов третьих лиц, которые проверяют номера телефонов для вас, но я не знаю, если это лучший вариант в этой ситуации. Однако, если вы все использовали одну из этих третьих сторон и можете дать рекомендацию, мы будем очень признательны.

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

  • не номер 555
  • не содержит 7 одинаковых цифр
  • действительный код города (он легко доступен)
  • не 123-1234 или 123-4567
  • Думаю, я мог бы также отсчитать 867-5309 (heh*)

Приведет ли это к ситуациям, которые вы можете придумать, не позволяя пользователю вводить свой номер телефона? Не могли бы вы придумать какие-либо другие правила, которых не должно быть в номере телефона? Есть другие мысли?

Я угадывать (не из США), что вы ищете подтверждение для номеров телефонов в США. Если вам также нужна проверка международного номера, это будет более чем немного сложнее.

Rob 06.10.2008 22:12

Да, я внесу правку, спасибо

Patcouch22 06.10.2008 22:13
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
7
2
7 795
13
Перейти к ответу Данный вопрос помечен как решенный

Ответы 13

867-5309 - действительный номер телефона, который назначается людям с разными кодами городов.

Также незаконно продавать свой номер, если он вам не нравится (или покупать его у кого-то другого) без вмешательства телефонной компании. В прошлом году в Нью-Йорке был парень, которого оштрафовали за это, когда он пытался продать 867-5309 :)

warren 06.10.2008 22:14

И это объяснило бы шутку нашим читателям, не являющимся американцами, и тем, кто не может вспомнить 1980-е годы. en.wikipedia.org/wiki/Jenny_(867-5309)

Onorio Catenacci 06.10.2008 22:17

Извините, ссылка по какой-то причине не обрабатывается правильно. В любом случае, поищите это в Википедии, если вы не поняли анекдота. :-)

Onorio Catenacci 06.10.2008 22:19

Если вы придерживаетесь только чисел в формате США и Канады, я думаю, что следующее регулярное выражение может сработать: [2-9] [0-9] [0-9] - [2-9] [0-9] [0-9] - [0-9] [0-9] [0-9] [0- 9] &! [2-9] [0-9] [0-9] -555- [0-9] [0-9] [0-9] [0-9]

все, что позволяет использовать номера, начинающиеся с 911 (или 411, если на то пошло), вероятно, не так уж и хорошо

tloach 06.10.2008 22:14

Я считаю, что есть другие числа * 11, которые делают что-то. См. en.wikipedia.org/wiki/N11_code для получения дополнительной информации, но я думаю, что это зависит от вашего региона. Однако службы 911 и 411 работают практически по всей территории США.

Thomas Owens 06.10.2008 22:19

Вам также необходимо принять во внимание десятизначный набор номера, который сейчас используется в некоторых регионах: он отличается от междугороднего набора (например, 303-555-1234, в отличие от 1-303-555-1234). В некоторых местах действительный номер телефона состоит из десяти цифр; в других - семь.

только для местных звонков, и даже если это 7, я думаю, вы можете использовать полные 10 цифр

tloach 06.10.2008 22:17

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

TheSmurf 08.10.2008 19:59

Если вы можете проверить код города, то, если вам действительно очень не нужно знать их номер телефона, вы, вероятно, делаете все, что разумно.

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

tloach 06.10.2008 22:20

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

В PHP:

function phone_number_is_valid($phone) {
    return (eregi('^(?:\([2-9]\d{2}\)\ ?|[2-9]\d{2}(?:\-?|\ ?))[2-9]\d{2}[- ]?\d{4}$', $phone));
}

Вы можете найти различные регулярные выражения в Интернете. Я нашел ту, что выше, на http://regexlib.com/DisplayPatterns.aspx?categoryId=7&cattabindex=2

Обновлено: некоторые языковые сайты для регулярных выражений:

+1. Спасибо за ссылку на регулярные выражения C# для телефонных номеров. У меня отлично сработало.

p.campbell 15.08.2009 02:03

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

Может, посмотрите ответы на этот вопрос.

Превосходно! не подошел к моему связанному вопросу.

Patcouch22 06.10.2008 22:25

Ваши клиенты по-прежнему могут делать то же, что и я, а именно сообщать местный номер moviefone.

Кроме того, 123-1234 или 123-4567 являются недопустимыми числами, потому что префикс начинается с 1, но 234-5678 или 234-1234 действительно будут действительными (хотя это выглядит фальшивым).

Нет, первая из последних 7 цифр не может быть 1

Chris Marasti-Georg 06.10.2008 22:24

В Django есть симпатичный небольшой пакет contrib под названием localflavor, в котором есть много проверочных кодов для конкретной страны, например почтовые индексы или номера телефонов. Вы также можете посмотреть в исходном коде, как django обрабатывает их для страны, которую вы хотите использовать; Например: Проверка формы США. Это может быть отличным источником информации о странах, о которых вы также мало знаете.

Ответ принят как подходящий

Мне кажется, что вы прикладываете к этому больше усилий, чем требуется. Рассматривать:

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

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

В любом случае, простой тест даст вам хорошие результаты, а переход к более сложным наборам правил займет все больше времени, но при этом принесет вам все меньше пользы (а также потенциально добавит ложных срабатываний, как уже было показано с «семью из та же цифра »и 867-5309 падежей).

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

    public static bool isPhone(string phoneNum)
    {
        Regex rxPhone1, rxPhone2;

        rxPhone1 = new Regex(@"^\d{10,}$");
        rxPhone2 = new Regex(@"(\d)");

        if (phoneNum.Trim() == string.Empty)
            return false;

        if (phoneNum.Length != 10)
            return false;

        //Check to make sure the phone number has at least 10 digits
        if (!rxPhone1.IsMatch(phoneNum))
            return false;

        //Check for repeating characters (ex. 9999999999)
        if (rxPhone2.IsMatch(phoneNum))
            return false;

        //Make sure first digit is not 1 or zero
        if (phoneNum.Substring(0,1) == "1" || phoneNum.Substring(0,1) == "0")
            return false;

        return true;

    }

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

Private Sub OnNumberChanged()
    Dim sep = "-"
    Dim num As String = Number.ToCharArray.Where(Function(c) Char.IsDigit(c)) _
                                                 .ToArray
    Dim ext As String = Nothing
    If num.Length > 10 Then ext = num.Substring(10)
    ext = If(IsNullOrEmpty(ext), "", " x" & ext)
    _Number = Left(num, 3) & sep & Mid(num, 4, 3) & sep & Mid(num, 7, 4) & ext
End Sub

Моя функция проверки выглядит так:

Public Shared Function ValidatePhoneNumber(ByVal number As String)
    Return number IsNot Nothing AndAlso number.ToCharArray. _
                                  Where(Function(c) Char.IsNumber(c)).Count >= 10
End Function

Я вызываю эту последнюю функцию @ методом OnNumberChanging (number As String) объекта.

Я нашел этот код наиболее подходящим для проверки телефона в США и за рубежом:

((\+[1-9]{1,4}[ \-]*)|(\([0-9]{2,3}\)[ \-]*)|([0-9]{2,4})[ \-]*)*?[0-9]{3,4}?[ \-]*[0-9]{3,4}?$

Вы можете найти (хотя и несколько устаревшее) обсуждение здесь.

Другие вопросы по теме