Проверка номера в США
У меня есть форма веб-сайта, которая требует ввода номера телефона в США для последующих целей, и это очень необходимо в этом случае. Я хочу попытаться устранить пользователей, входящих в данные мусора 330-000-0000 . Я видел несколько сторонних сторон, которые проверяют номера телефонов для вас, однако idk, если это лучший вариант для этой ситуации. Однако, если вы все использовали одну из этих третьих сторон и можете сделать рекомендацию, которая также будет очень признательна здесь.
Однако я рассматриваю возможность проверки числа против набора правил, чтобы просто сузить количество полученных нежелательных телефонных номеров.
- не номер 555
- не содержит 7 одинаковых цифр
- действительный код области (это доступно)
- не 123-1234 или 123-4567
- Я думаю, я мог бы также подсчитать 867-5309 (хех * )
Будет ли это результатом в любых ситуациях, о которых вы можете думать, что не позволит пользователю вводить свой номер телефона? Не могли бы вы подумать о каких-либо других правилах, которые не должны содержать номер телефона? Любые другие мысли?
- В чем разница между re.search и re.match?
- Как проверить адрес электронной почты в JavaScript?
- Простой способ удалить несколько пробелов в строке?
- Регулярное выражение для соответствия стандарту 10-значного номера телефона
- Какова временная сложность алгоритмов среднего регулярного выражения?
- Boost C ++ regex - как получить несколько совпадений
- Преобразовать текст camelCaseText в текст предложения
- Как имитировать поведение автоматической пересылки стека
- Regex для проверки правильности URL-адреса, который заканчивается на .jpg, .png или .gif
- В чем смысл + в регулярном выражении?
- Удалить все специальные символы из строки в R?
Мне кажется, что вы прилагаете к этому больше усилий, чем это требует. Рассматривать:
Если ваша цель состоит в том, чтобы защищать от неверно введенных номеров телефонов, то вы, вероятно, наверняка поймаете более 90% из них с помощью очень простой проверки.
Если ваша цель состоит в попытке заставить пользователей предоставить действительный номер, хотят ли они предоставить эту информацию или нет, то вы взяли на себя безнадежную задачу – даже если вы получили доступ к 100% точной, вторые базы данных telco, чтобы убедиться, что введенный точный номер в настоящее время жив, вы по-прежнему не получаете уверенности в том, что номер, который они дали вам, является их собственным. Еще раз, простая проверка будет сорвать большинство людей, вводящих фиктивные номера, но те, кто готов попробовать более двух или трех раз , найдут способ победить ваши попытки получить их количество.
В любом случае простой тест поможет вам получить хорошие результаты, и переходить на более сложные наборы правил будет занимать все больше времени, при этом обеспечивая вам все большую выгоду (в то же время потенциально добавляя ложные срабатывания, как уже показано с помощью «семи из то же число “и 867-5309 случаев).
Вы можете выполнять проверку номера телефона внутри своего приложения с помощью регулярных выражений. В зависимости от вашего языка вы можете вызвать функцию, которая вернет 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
Изменить: некоторые языковые сайты для регулярных выражений:
- PHP на php.net: http://php.net/regex
- C # в MSDN
- Java: http://java.sun.com/developer/technicalArticles/releases/1.4regex/
Если вы можете проверить код региона, то, если вам действительно не нужно знать свой номер телефона, вы, вероятно, делаете столько, сколько разумно.
Амибе взгляните на ответы на этот вопрос .
867-5309 – действительный номер телефона, который назначается людям в разных кодах областей.
В Django есть небольшой пакет с небольшим вкладом, который называется localflavor, у которого есть много кода проверки конкретной страны, например почтовые индексы или номера телефонов. Вы можете посмотреть в источнике также посмотреть, как django обрабатывает их для страны, которую вы хотели бы использовать; Например: US Form validation . Это может стать отличным источником информации о странах, о которых вы мало знаете.
Ваши клиенты все еще могут делать то, что я делаю, что дает местный номер мотивов.
Кроме того, 123-1234 или 123-4567 являются только недопустимыми числами, потому что префикс начинается с 1, но 234-5678 или 234-1234 действительно будет действительным (хотя он выглядит поддельным).
Если вы придерживаетесь только чисел в США и Канаде, я думаю, что следующее регулярное выражение может работать: [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]
Вы также должны учитывать десятизначный набор, который используется в некоторых областях сейчас: это отличается от дальнего набора (т. Е. 303-555-1234, в отличие от 1-303-555-1234). В некоторых местах действительный номер телефона составляет десять цифр; в других – семь.
Эти параметры выглядят неплохо для меня, я также могу избежать номеров, начиная с 911, чтобы быть в безопасности.
В моих исследованиях, которые я должен был сделать заранее>. <Я обнаружил, что 7 одинаковых цифр являются действительными номерами телефонов. Поэтому я могу подсчитать это правило.
Это быстрая функция, которую я использую (ниже). У меня есть доступ к базе данных zipcode, содержащей данные isacode и prefix, которые обновляются ежемесячно. Я часто думал о том, чтобы сделать падение данных, чтобы подтвердить, что префикс существует для кода области.
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; }
Я не nkow, если это подходящее место, это функция форматирования, а не функция проверки, я подумал, что давайте поделимся ею с сообществом, возможно, в один прекрасный день это будет полезно.
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 (номер As String) объекта.
Для проверки в США и международном телефоне я нашел этот код наиболее подходящим:
((\+[1-9]{1,4}[ \-]*)|(\([0-9]{2,3}\)[ \-]*)|([0-9]{2,4})[ \-]*)*?[0-9]{3,4}?[ \-]*[0-9]{3,4}?$
Здесь вы можете найти (хотя и несколько устаревшую) дискуссию.