Projektuję więc stronę internetową, która będzie używana dla użytkowników globalnych, w tym użytkowników z Kanady, USA, Indii, Wielkiej Brytanii itp. Muszę zastosować weryfikację tego pola numeru telefonu, ale nie jestem pewien, jak najlepiej to zrobić .
Niektóre z ważnych formatów mogę myśleć o to:
- 1800123456 (Indie)
- Zastosowanie „-” w amerykańskich numerów telefonów
Jestem trochę zdezorientowany, jakie znaki specjalne powinienem umożliwić użytkownikowi (np. - / ()
). Jak inni rozwiązali to w przeszłości?
javascript
validation
internationalization
Leśniczy
źródło
źródło
Odpowiedzi:
Tylko dlatego, że można ograniczyć coś (to co masz opłacone, jako programista, aby napisać kod), to nie znaczy, trzeba rzeczywiście to zrobić.
Jaki jest sens sprawdzania numeru? Dlaczego to jest przydatne? Czy to się nie powiedzie, jeśli użytkownik wpisze „0800DIALTHIS” lub „私 は 電話 番号 を 持 っ て い な い” lub „(499) 123-45-67 добавочный 4425”? To na pewno będzie (można powiedzieć „globalny”. Czy nie?), Podczas gdy użytkownicy po prostu chciałem, aby przekazać Ci ważną informację, w jaki sposób skontaktować się z nimi telefonicznie.
Poza tym sposób dane są przechowywane powinny być uregulowane w sposób są one wykorzystywane. Jak będziesz używać liczb? Czy będą one używane do automatycznego wysyłania spamu SMS - czy będą wybierani ręcznie przez menedżerów? Jeśli to drugie, dopuszczenie dodatkowych znaków jest w porządku, ponieważ ludzki mózg będzie mógł je przeanalizować w sposób, który uznają za najbardziej odpowiedni; w tym przypadku tak naprawdę nie potrzebujesz żadnych sprawdzeń, które po prostu drażnią użytkowników.
źródło
Bardzo trudno byłoby ustalić, czy numer jest prawidłowy, czy nie, ponieważ różne kraje mają różne formaty. Na przykład we Francji 06 12 34 56 78 jest ważnym numerem telefonu, podczas gdy 00 12 34 56 78 nie jest, ponieważ numer może zacząć się od 01 do 09, 06 i 07 jako telefony komórkowe.
Numery telefonów można również zapisywać w kilku formatach, nawet w tym samym kraju. Widziałem:
dwa ostatnie są formą międzynarodowej.
Ogólnie:
+
symbol tylko jako wiodący znak, myślniki, kropki, przecinki i spacje.Nie zaleca się zbyt głębokiego sprawdzania poprawności w poszczególnych krajach. Nie tylko istnieje duża liczba zasad, ale także zasady się zmieniają. Na przykład we Francji, kilka lat temu nie było żadnych numerów począwszy od 07 lub 09. Wraz ze wzrostem liczby telefonów komórkowych pojawił 07. Z usług VoIP pojawiły 09.
Możesz również wziąć pod uwagę numery specjalne. Na przykład 3635 to ważny numer we Francji, nawet jeśli zawiera tylko cztery cyfry i rozpoczyna się niezerowe.
źródło
+31 (0)30 1234567
gdzie 31 jest Holandia, 030 jest numer kierunkowy i 1234567 jest abonentem.Nie ograniczaj znaków; weź wszystko, co ci daje. Ale kiedy go wybrać, weź tylko cyfry. Nawet wtedy może to działać źle. Byłem w Tajlandii na rok przed tym, jak dowiedziałem się, że 123-4567-9 nie oznacza rozszerzenia, ale zakres numerów od 1234567 do 1234569. Kiedy wybrałem numer „12345679”, zadziałało, ponieważ firma telefoniczna zignorowała dodatkową cyfrę. Weź wszystko, wybierz tylko cyfry.
Uwielbiam to, że mój nowy telefon umożliwia spacji numer telefonu. Mogę wpisać „123 456 7890” w ten sposób, nie wszystkie razem.
źródło
Wsporniki, myślnik i spacja.
Gdy użytkownik wpisał numer telefonu zawierający te symbole, można zweryfikować je według zasad krajowych (które będzie trzeba zbierać te zasady dla każdego kraju), a następnie non-cyfry można rzeczywiście spadła, gdy jest przetwarzany wewnętrznie w twoim oprogramowaniu.
To dlatego, IDD (bezpośrednie rozmowy międzynarodowe) uniemożliwia wymaga żadnych „znaków specjalnych”, aby być rzeczywiście używane w wybieraniu numeru, z wyjątkiem przerw w nabijania cyfry.
(Nie jestem kompetentny w tym w ogóle, proszę mnie poprawić, jeśli się mylę).
źródło
Jedyną rzeczą, która powinna zostać potwierdzone jest liczba cyfr - to pasuje do tego, co trzeba by nazwać?
Kody dostępu mogą / nie powinny być dozwolone przez użytkownika (tj. +1 dla USA). Powiem ci dlaczego - jeśli jest to Amerykanin wchodzący do niego, a oni nie są zbyt bystrzy, prawdopodobnie będą chcieli wpisać 001 zamiast 1. Powodem jest to, że 00 to sposób, w jaki uzyskujesz dostęp do numeru międzynarodowego z USA. Nie wiedzą, jaka jest różnica między tym a tylko +1. Jeśli dzwonisz na numery stacjonarne między numerami kierunkowymi (a czasem w tym samym numerze kierunkowym), wprowadzisz również 1 przed tym numerem. Tak jak w Japonii.
Weź Japonię. Prowincjonalne linie naziemne są dostępne z 0 na przedniej stronie. Ale jeśli dzwonisz spoza Japonii, nie potrzebujesz tego 0.
Numery komórkowe w Chinach mają 10 cyfr, a w Hongkongu 8. Jeśli Twój formularz zawiera kraj, nie pytaj nawet o kod kraju na początku numeru - po prostu automatycznie pokaż go w tekście tylko do odczytu tuż obok numer, który należy wprowadzić.
I tak dalej.
Zweryfikuj tylko liczbę cyfr (upewnij się, że żadne litery nie są akceptowane) i ułatw użytkownikowi końcowemu wpisanie właściwej liczby cyfr. Oznacza to, że nie powinni wprowadzać kodu kraju, a jeśli Twój formularz jest super inteligentny, może nawet nie wymagać podania kodu obszaru, jeśli jest to numer telefonu stacjonarnego. Lub jeśli zaczną wpisywać takie rzeczy jak kod dostępu, na przykład 0 przed japońskim numerem, po prostu daj im znać, że nie muszą.
Każda inna postać, poza cyframi, powinna być wtedy spornym punktem - nie ma szansy na nią wejść.
źródło
Google ma lib do tego:
https://github.com/googlei18n/libphonenumber
Robi starań, ja sądzę, że musi istnieć przypadki, które nie są obsługiwane, gdyż jest to w żadnym wypadku nie jest łatwym zadaniem. Niech numery wejściowe użytkowników i litery, litery zdejmij później z kodem.
źródło