Поэтому я разрабатываю веб-страницу, которая будет использоваться для глобальных пользователей, включая пользователей из Канады, США, Индии, Великобритании и т. Д. Мне нужно применить проверки для этого поля телефонного номера, но я не уверен, что лучший способ сделать это ,
Вот некоторые из допустимых форматов:
- 1800123456 (Индия)
- использование "-" в номерах телефонов США
Я немного озадачен тем, какие специальные символы я должен разрешить пользователю вводить (например, - / ()
). Как другие решали это в прошлом?
javascript
validation
internationalization
рейнджер
источник
источник
Ответы:
Просто потому, что вы можете что-то ограничить (это то, за что вы, как программист, платите, за написание кода), это не значит, что вы действительно должны это делать.
Какой смысл проверять число? Почему это полезно? Произойдет ли сбой, если пользователь введет «0800DIALTHIS», или «私 は 電話 番号 を 持 っ て い な い», или «(499) 123-45-67 добавочный 4425»? Это, безусловно, произойдет (вы говорите «глобально». Не так ли?), В то время как пользователи просто хотели передать вам важную информацию о том, как связаться с ними по телефону.
Кроме того, способ хранения данных должен регулироваться тем, как они используются. Как вы будете использовать цифры? Будут ли они использоваться для автоматической отправки SMS-спама или они будут набираться вручную менеджерами? Если это последнее, то разрешить добавление каких-либо дополнительных символов вполне допустимо, поскольку человеческий мозг сможет анализировать их так, как они считают наиболее подходящим; и в этом случае вам не нужны никакие проверки, которые будут раздражать пользователей.
источник
Было бы очень трудно узнать, является ли число действительным или нет, так как разные страны имеют разные форматы. Например, во Франции 06 12 34 56 78 является действительным номером телефона, а 00 12 34 56 78 - нет, поскольку номер может начинаться только с 01 по 09, 06 и 07 - это мобильные телефоны.
Кроме того, телефонные номера могут быть записаны в нескольких форматах даже в одной и той же стране. Я видел:
последние два являются международной формой.
В общем:
+
символ только в качестве начального символа, тире, точек, запятых и пробелов.Не рекомендуется углубляться в валидацию по странам. Не только существует большое количество правил, но и правила меняются. Например, во Франции несколько лет назад не было телефонных номеров, начинающихся с 07 или 09. С ростом количества мобильных телефонов появилось 07. С услугами VoIP появилось 09.
Вы также можете принять во внимание специальные номера. Например, 3635 является допустимым числом во Франции, даже если оно содержит только четыре цифры и начинается с ненулевого значения.
источник
+31 (0)30 1234567
где 31 - Нидерланды, 030 - код города, а 1234567 - абонент.НЕ ограничивайте персонажей; возьми всё, что он тебе даст. Но когда вы набираете его, берите только цифры. Даже тогда это может работать неправильно. Я был в Таиланде за год до того, как узнал, что 123-4567-9 означает не расширение, а диапазон номеров, от 1234567 до 1234569. Когда я набрал «12345679», это сработало, потому что телефонная компания проигнорировала дополнительную цифру. Бери что угодно, набирай только цифры.
Мне нравится, что мой новый телефон разрешает пробелы в номере телефона. Я могу ввести "123 456 7890" просто так, не все пюре вместе.
источник
Скобки, тире и пробел.
После того, как пользователь ввел номер телефона, содержащий эти символы, вы можете проверить их в соответствии с правилами для конкретной страны (которые вам понадобятся, чтобы собрать эти правила для каждой страны), а затем недействительные цифры могут фактически быть удалены обрабатывается внутри вашего программного обеспечения.
Это связано с тем, что IDD (международный прямой набор) делает невозможным обязательное использование каких-либо «специальных символов» при наборе номера, за исключением пауз при наборе цифр.
(Я совсем не разбираюсь в этом; пожалуйста, поправьте меня, если я ошибаюсь.)
источник
Единственное, что должно быть проверено, это количество цифр - соответствует ли оно тому, что вам нужно было бы назвать?
Коды доступа могут / не должны быть разрешены для ввода пользователем (например, +1 для США). Я скажу вам, почему - если это американец, который входит в него, и они не настолько умны, они, вероятно, захотят ввести 001 вместо 1. Причина в том, что 00 - это то, как вы получаете доступ к международному номеру из США. Они не знают, в чем разница между этим и просто +1. Если вы звоните на стационарные телефоны между кодами городов (а иногда и в одном и том же коде города), вы также введете 1 перед этим номером. Как в Японии
Возьми Японию. К провинциальным наземным линиям обращаются с 0 на передней части. Но если вы звоните из-за пределов Японии, вам это не нужно 0.
Мобильные номера в Китае состоят из 10 цифр, а в Гонконге - 8. Если в вашей форме указана страна, даже не спрашивайте код страны в начале номера - просто автоматически отобразите его в тексте, доступном только для чтения, рядом с номер, который им нужно ввести.
Список можно продолжить.
Просто проверьте количество цифр (убедитесь, что буквы не принимаются) и упростите для конечного пользователя ввод правильного количества цифр. Т.е. им не нужно вводить код страны, а если ваша форма очень умная, им может даже не понадобиться вводить код города, если это стационарный номер. Или, если они начнут вводить такие вещи, как код доступа, например, 0, перед японским номером, просто дайте им знать, что им это не нужно.
Любой другой персонаж, кроме цифр, должен быть спорным - у них нет шансов войти в него.
источник
У Google есть lib для этого:
https://github.com/googlei18n/libphonenumber
Это делает все возможное, я думаю, что должны быть случаи, которые не обрабатываются, поскольку это отнюдь не простая задача. Позвольте пользователям вводить цифры и буквы, позже удаляйте буквы с кодом.
источник