Jakie znaki specjalne należy zezwolić na numer telefonu?

20

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:

  1. 1800123456 (Indie)
  2. 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?

Leśniczy
źródło
1
Co z numerami telefonów wyrażonymi literami, np. 0800 DIALTHIS?
mouviciel
3
Co chcesz, aby zapobiec? Użytkownik kłamie? Użytkownik nie chce, aby poznać ich liczbę? Użytkownik jest zbyt leniwy, aby wprowadzić coś? Użytkownik robi literówkę?
Benjol
@ Mouviviel: tak, że też muszę myśleć o ja biorę jeden scenariusz valdation naraz tak będę o tym myśleć.
Ranger
@Benjol: Ta aplikacja jest komercyjnym więc nie możemy ryzyka na naszych coustomers Znam użytkownik wejdzie na właściwą liczbę Ale co, jeśli on / ona nie. Valdation są bardzo ważne, ponieważ zaoszczędzić zastosowanie nie tylko literówki. Nie chcę, aby moje DB wypełniona niepotrzebnych śmieci.
Ranger
5
co robisz, aby zweryfikować ich adresy e-mail? Zauważysz, że prawie wszystkie strony internetowe sprawdzają poprawność „w prawdziwym życiu” (tj. Wysyłają ci pocztę). Myślę, że jeśli numer telefonu jest to ważne, że trzeba zrobić coś odpowiednik.
Benjol,

Odpowiedzi:

21

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.

P Shved
źródło
7
+1 dla „użytkowników po prostu chciałem, aby przekazać Ci ważną informację”. Zbyt często widziałem niepotrzebne sprawdzanie poprawności, które po prostu denerwuje użytkownika bez żadnych rzeczywistych wymagań technicznych (lub organizacyjnych).
perdian
6
+1 - sprawdzanie poprawności numeru telefonu (szczególnie zdefiniowane ogólnie) jest często bezcelowe, nie jest przyszłościowe (KL5-6743 był na przykład prawidłowym numerem telefonu) i po prostu denerwuje użytkowników, którzy mają specjalne przypadki. Niech twoje numery telefonów będą dużym polem tekstowym i pozwól automatycznym dialerom (jeśli są w tym scenariuszu) przeanalizować, co mogą. Wyjątkiem może być podniesiona do ludzi, którzy mogą poradzić sobie z sytuacją w odpowiedni sposób.
EZ Hart,
8
+1, a co najważniejsze tylko dlatego, że numer telefonu jest prawidłowy, to nie znaczy, że istnieje, a nawet jeśli istnieje, to nie znaczy, że należy do danej osoby ...
Benjol
O tak, wymyślę kraje, w których mieszkają nasi główni użytkownicy, a następnie napiszę kod weryfikacyjny. Dzięki wszystkim, doceniam twoje wysiłki.
Ranger
4
@ Ranger Jest to dokładne przeciwieństwo odpowiedzi na pytanie.
Sebastian Redl,
7

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:

  • 06 12 34 56 78
  • 0612345678
  • 06.12.34.56.78
  • 06-12-34-56-78
  • +33612345678
  • +33 (0) 6 12 34 56 78

dwa ostatnie są formą międzynarodowej.

Ogólnie:

  1. Zezwalaj na nawiasy, +symbol tylko jako wiodący znak, myślniki, kropki, przecinki i spacje.
  2. Jeśli to możliwe, pamiętaj tylko znormalizowaną formę (tj. +33 (0) 612345678).
  3. Jeśli nie jest to możliwe, przynajmniej usuń znaki separatora (np. 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.

Arseni Mourzenko
źródło
1
Pomoże to pokazać użycie nawiasów w twoich przykładach. Numery międzynarodowe często wykorzystują je ująć zero z numerem kierunkowym, aby wskazać, że go nie wybierać Dzwoniąc z zagranicy. Np +31 (0)30 1234567gdzie 31 jest Holandia, 030 jest numer kierunkowy i 1234567 jest abonentem.
Marjan Venema
2
Nie zapomnij opcjonalne pole dla numerem kierunkowym (który może potrzebować, aby umożliwić funta lub Asterisk Key).
rwong
@MarjanVenema, nie robię dużo połączeń międzynarodowych, ale to norma dodać zero, a dodać nawiasy (0), aby powiedzieć NIE, aby ją wybrać? Czy nie byłoby łatwiej po prostu całkowicie pominąć 0?
CaffGeek,
@Chad: Nie. Mówi międzynarodowym użytkownikom, że muszą to pominąć, i krajowym, że muszą z niego skorzystać. Nie wszystkie kraje mają numery kierunkowe zaczynające się od zera. Takie postępowanie zapewnia, że ​​gdy ktoś zobaczy numer, będzie wiedział, co robić, gdy jest w kraju i poza krajem. W końcu nie wszyscy dzwoniący w kraju muszą być rezydentami ...
Marjan Venema
@MarjanVenema, och, rozumiem, nie zdawałem sobie sprawy, że użytkownicy krajowi tego potrzebują, nauczyłem się dziś czegoś nowego.
CaffGeek
3

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.

Andy Canfield
źródło
2
+100. Nie ma nic gorszego niż komputer z napisem „usuń - z numeru”, tak jakby komputer nie miał pojęcia, jak to zrobić. To samo dotyczy numerów kart kredytowych, FWIW.
Bryan Oakley
0

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ę).

rwong
źródło
3
Zapominasz znak + dla dostępu międzynarodowego \
Marjan Venema
2
pozwól też na literę x - przynajmniej w Stanach Zjednoczonych często występuje prefiks rozszerzenia x (np .: 555-1212 x123).
Bryan Oakley
0

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ść.

Todd Main
źródło
1
Nie zgadzam się, aby upewnić się, że żadne litery nie są akceptowane - śmiało akceptuj, a następnie po prostu je ignoruj. Ludzie naturalnie piszą rozszerzenia z wiodącym „x” (np. 555-1212 x123). Dlaczego nie pozwolić na to? Ludzie potrafią to dokładnie przeanalizować, a jeśli komputer musi z niego skorzystać, może trywialnie usunąć cyfry.
Bryan Oakley
0

Google ma lib do tego:

Wspólna biblioteka Google Java, C ++ i JavaScript firmy Google do analizowania, formatowania i sprawdzania międzynarodowych numerów telefonów.

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.

Christophe Roussy
źródło