Проверка номера телефона в США - PullRequest
7 голосов
/ 06 октября 2008

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

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

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

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

Ответы [ 14 ]

9 голосов
/ 07 октября 2008

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

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

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

3 голосов
/ 06 октября 2008

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

В 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

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

2 голосов
/ 06 октября 2008

Эмиб взгляните на ответы на этот вопрос .

2 голосов
/ 06 октября 2008

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

1 голос
/ 06 октября 2008

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

1 голос
/ 06 октября 2008

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

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

1 голос
/ 06 октября 2008

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

0 голосов
/ 12 ноября 2010

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

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

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

0 голосов
/ 29 октября 2009

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

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) объекта.

0 голосов
/ 04 октября 2009

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

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

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

        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;

    }
...