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





867-5309 - действительный номер телефона, который назначается людям с разными кодами городов.
Также незаконно продавать свой номер, если он вам не нравится (или покупать его у кого-то другого) без вмешательства телефонной компании. В прошлом году в Нью-Йорке был парень, которого оштрафовали за это, когда он пытался продать 867-5309 :)
И это объяснило бы шутку нашим читателям, не являющимся американцами, и тем, кто не может вспомнить 1980-е годы. en.wikipedia.org/wiki/Jenny_(867-5309)
Извините, ссылка по какой-то причине не обрабатывается правильно. В любом случае, поищите это в Википедии, если вы не поняли анекдота. :-)
Если вы придерживаетесь только чисел в формате США и Канады, я думаю, что следующее регулярное выражение может сработать: [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, если на то пошло), вероятно, не так уж и хорошо
Я считаю, что есть другие числа * 11, которые делают что-то. См. en.wikipedia.org/wiki/N11_code для получения дополнительной информации, но я думаю, что это зависит от вашего региона. Однако службы 911 и 411 работают практически по всей территории США.
Вам также необходимо принять во внимание десятизначный набор номера, который сейчас используется в некоторых регионах: он отличается от междугороднего набора (например, 303-555-1234, в отличие от 1-303-555-1234). В некоторых местах действительный номер телефона состоит из десяти цифр; в других - семь.
только для местных звонков, и даже если это 7, я думаю, вы можете использовать полные 10 цифр
Не везде. В Альберте (где я живу), до перехода на 10-значный набор, набор всех десяти приводил к записи, в которой вам предлагалось сначала набрать «1» для междугороднего набора, а затем отключиться.
Если вы можете проверить код города, то, если вам действительно очень не нужно знать их номер телефона, вы, вероятно, делаете все, что разумно.
очевидно, вы также захотите проверить 10 цифр, я предположил, что это само собой разумеющееся.
Вы можете выполнять внутреннюю проверку номера телефона в своем приложении с помощью регулярных выражений. В зависимости от вашего языка вы можете вызвать функцию, которая вернет истину, если предоставленный номер телефона совпадает с выражением.
В 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# для телефонных номеров. У меня отлично сработало.
Эти параметры мне кажутся довольно хорошими, я также могу избегать номеров, начинающихся с 911, на всякий случай.
Может, посмотрите ответы на этот вопрос.
Превосходно! не подошел к моему связанному вопросу.
Ваши клиенты по-прежнему могут делать то же, что и я, а именно сообщать местный номер moviefone.
Кроме того, 123-1234 или 123-4567 являются недопустимыми числами, потому что префикс начинается с 1, но 234-5678 или 234-1234 действительно будут действительными (хотя это выглядит фальшивым).
Нет, первая из последних 7 цифр не может быть 1
В 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}?$
Вы можете найти (хотя и несколько устаревшее) обсуждение здесь.
Я угадывать (не из США), что вы ищете подтверждение для номеров телефонов в США. Если вам также нужна проверка международного номера, это будет более чем немного сложнее.