Welche Sonderzeichen sollte man für eine Telefonnummer zulassen?

20

Daher entwerfe ich eine Webseite, die für globale Benutzer verwendet wird, einschließlich Benutzer aus Kanada, den USA, Indien, Großbritannien usw. Ich muss für dieses Telefonnummernfeld Validierungen anwenden, bin mir jedoch nicht sicher, wie ich am besten vorgehen soll .

Einige der gültigen Formate, die ich mir vorstellen kann, sind:

  1. 1800123456 (Indien)
  2. Verwendung von "-" in US-Telefonnummern

Ich bin etwas verwirrt darüber, welche Sonderzeichen ein Benutzer eingeben darf (z. B. - / ()). Wie haben andere das in der Vergangenheit gelöst?

Ranger
quelle
1
Was ist mit Telefonnummern, die mit Buchstaben ausgedrückt werden, z. B. 0800DIALTHIS?
mouviciel
3
Was versuchst du zu verhindern? Der Benutzer lügt? Der Benutzer möchte nicht, dass Sie seine Nummer kennen? Ist der Benutzer zu faul, um etwas einzugeben? Der Benutzer macht einen Tippfehler?
Benjol
@ Mouviviel: Ja, ich muss auch darüber nachdenken, ich nehme jeweils ein Bewertungsszenario, also werde ich darüber nachdenken.
Ranger
@Benjol: Diese Anwendung ist eine kommerzielle, also können wir kein Risiko für unsere Kunden eingehen. Ich weiß, dass ein Benutzer eine korrekte Nummer eingibt, aber was ist, wenn er es nicht tut. Valdation sind ziemlich wichtig, da sie nicht nur Tippfehler speichern. Ich möchte nicht, dass meine DB mit nutzlosem Müll gefüllt wird.
Ranger
5
gut, was machst du, um ihre E-Mail-Adressen zu überprüfen? Sie werden feststellen, dass fast alle Websites eine "echte" Validierung durchführen (dh Ihnen eine E-Mail senden). Ich glaube, wenn die Telefonnummer ist , dass wichtig ist , müssen Sie etwas Gleichwertiges zu tun.
Benjol

Antworten:

21

Nur weil Sie etwas einschränken können (für das Sie als Programmierer bezahlt werden, um Code zu schreiben), heißt das nicht, dass Sie dies tatsächlich tun sollten.

Was bringt es, eine Zahl zu validieren? Warum ist es nützlich? Schlägt die Eingabe von "0800DIALTHIS" oder "私 私 は 電話 番号 を を 持 っ い な" oder "(499) 123-45-67 добавочный 4425" fehl? Das wird es sicherlich (Sie sagen "global", oder?), Während die Benutzer Ihnen nur wichtige Informationen über die telefonische Kontaktaufnahme übermitteln wollten.

Außerdem sollte die Art und Weise, wie Daten gespeichert werden, von der Art und Weise abhängen, wie sie verwendet werden. Wie werden Sie die Zahlen verwenden? Werden sie zum automatischen Versenden von SMS-Spam verwendet - oder werden sie von Managern manuell gewählt? In letzterem Fall ist es in Ordnung, zusätzliche Zeichen zuzulassen, da das menschliche Gehirn in der Lage ist, sie so zu analysieren, wie es für sie am besten geeignet ist. und in diesem Fall brauchen Sie wirklich keine Validierungen, was nur menschliche Benutzer ärgert.

P Shved
quelle
7
+1 für "Benutzer wollten Ihnen nur eine wichtige Information übermitteln". Ich habe zu oft eine unnötige Validierung gesehen, die den Benutzer ohne tatsächliche technische (oder organisatorische) Anforderungen einfach nervt.
perdian
6
+1 - Die Validierung von Telefonnummern (besonders allgemein definiert) ist oft sinnlos, nicht zukunftssicher (KL5-6743 war beispielsweise eine gültige Telefonnummer) und stört nur Benutzer, die Sonderfälle haben. Machen Sie aus Ihren Telefonnummern ein großes Textfeld und lassen Sie die automatischen Wählgeräte (falls in diesem Szenario vorhanden) analysieren, was sie können. Die Ausnahmen können zu Menschen erhoben werden, die mit der Situation angemessen umgehen können.
EZ Hart
8
+1 und vor allem, nur weil eine Telefonnummer gültig ist, heißt das nicht, dass sie existiert, und auch wenn sie existiert, heißt das nicht, dass sie der fraglichen Person gehört ...
Benjol
Oh ja, ich werde die Länder herausfinden, in denen unsere Hauptnutzer leben, und dann werde ich einen Validierungscode schreiben. Ich danke Ihnen allen für Ihre Bemühungen.
Ranger
4
@Ranger Das ist genau das Gegenteil von dem, worauf die Antwort kam.
Sebastian Redl
7

Es wäre sehr schwierig zu wissen, ob eine Nummer gültig ist oder nicht, da verschiedene Länder unterschiedliche Formate haben. In Frankreich ist zum Beispiel 06 12 34 56 78 eine gültige Telefonnummer, während 00 12 34 56 78 keine gültige Telefonnummer ist, da die Nummer nur von 01 bis 09 beginnen kann und 06 und 07 Mobiltelefone sind.

Die Telefonnummern können auch in demselben Land in verschiedenen Formaten geschrieben werden. Ich habe gesehen:

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

Die letzten beiden sind die internationale Form.

Im Allgemeinen:

  1. Erlaube Klammern, +Symbol nur als führendes Zeichen, Bindestriche, Punkte, Kommas und Leerzeichen.
  2. Denken Sie nach Möglichkeit nur an die normalisierte Form (z. B. +33 (0) 612345678).
  3. Ist dies nicht möglich, entfernen Sie mindestens Trennzeichen (wie Leerzeichen).

Es wird nicht empfohlen, die Validierung nach Ländern zu vertiefen. Es gibt nicht nur eine Vielzahl von Regeln, sondern auch Regeländerungen. Zum Beispiel in Frankreich gab es vor einigen Jahren keine Telefonnummern, die mit 07 oder 09 begannen. Mit der zunehmenden Anzahl von Mobiltelefonen tauchten 07. Mit VoIP tauchten Dienste mit 09 auf.

Sie können auch spezielle Nummern berücksichtigen. Beispiel: 3635 ist in Frankreich eine gültige Nummer, auch wenn sie nur vier Ziffern enthält und mit einer Nicht-Null beginnt.

Arseni Mourzenko
quelle
1
Es würde helfen, die Verwendung der Klammern in Ihren Beispielen zu zeigen. Internationale Nummern verwenden sie oft, um die führende Null der Vorwahl einzuschließen, um anzuzeigen, dass Sie sie nicht wählen, wenn Sie aus dem Ausland anrufen. ZB ist +31 (0)30 123456731 die Niederlande, 030 die Vorwahl und 1234567 der Abonnent.
Marjan Venema
2
Vergessen Sie nicht ein optionales Feld für den Erweiterungscode (der möglicherweise die Eingabe des Doppelpunkts oder des Sternchens erforderlich macht).
rwong
@MarjanVenema, ich wähle nicht viel ins Ausland, aber es ist Standard, die Null und Klammern (0) hinzuzufügen, um Ihnen mitzuteilen, dass Sie NICHT wählen sollen? Wäre es nicht einfacher, die 0 ganz wegzulassen?
CaffGeek
@Chad: Nein. Es teilt internationalen Benutzern mit, dass sie es weglassen müssen, und nationalen Benutzern, dass sie es verwenden müssen. Nicht alle Länder haben Vorwahlen, die mit einer Null beginnen. Auf diese Weise wird sichergestellt, dass jemand, der die Nummer sieht, weiß, was zu tun ist, wenn er im Land ist und wenn er nicht im Land ist. Nicht jeder, der national anruft, muss Einwohner sein ...
Marjan Venema
@ MarjanVenema, oh, ich verstehe nicht, dass nationale Benutzer es brauchten, lernte heute etwas Neues.
CaffGeek
3

Beschränken Sie die Zeichen nicht. nimm alles, was er dir gibt. Aber wenn Sie es wählen, nehmen Sie nur die Ziffern. Auch dann könnte es schief gehen. Ich war ein Jahr in Thailand, bevor ich erfuhr, dass 123-4567-9 keine Nebenstelle, sondern einen Nummernbereich von 1234567 bis 1234569 bedeutet. Als ich "12345679" wählte, funktionierte dies, weil die Telefongesellschaft die zusätzliche Ziffer ignorierte. Nimm alles, wähle nur Ziffern.

Ich liebe es, dass mein neues Telefon Leerzeichen in der Telefonnummer zulässt. Ich kann einfach so "123 456 7890" eingeben, nicht alle zusammen püriert.

Andy Canfield
quelle
2
+100. Es gibt nichts Schlimmeres als einen Computer, der sagt "Bitte entferne das - von der Zahl", als ob der Computer keine Ahnung hätte, wie er das alleine machen soll. Gleiches gilt für Kreditkartennummern, FWIW.
Bryan Oakley
0

Klammern, Bindestrich und Leerzeichen.

Nachdem der Benutzer die Telefonnummer eingegeben hat, die diese Symbole enthält, können Sie sie gemäß den länderspezifischen Regeln validieren (die Sie für jedes Land benötigen, um diese Regeln zu erfassen). Anschließend können die Nicht-Ziffern tatsächlich gelöscht werden, wenn sie angezeigt werden wird intern in Ihrer Software verarbeitet.

Dies liegt daran, dass IDD (International Direct Dialing) die Verwendung von "Sonderzeichen" zum Wählen einer Nummer mit Ausnahme von Pausen beim Eingeben der Ziffern unmöglich macht.

(Ich kenne mich damit überhaupt nicht aus. Bitte korrigieren Sie mich, wenn ich falsch liege.)

rwong
quelle
3
Sie vergessen das \ + Zeichen für internationalen Zugriff
Marjan Venema
2
erlauben Sie auch den Buchstaben x - zumindest in den USA ist es üblich, einer Erweiterung ein x voranzustellen (zB: 555-1212 x123).
Bryan Oakley
0

Das einzige, was validiert werden muss, ist die Anzahl der Ziffern. Entspricht es dem, was Sie anrufen müssten?

Zugangscodes dürfen / dürfen nicht von einem Benutzer eingegeben werden (dh +1 für die USA). Ich sage Ihnen, warum - wenn es ein Amerikaner ist, der es eingibt, und sie nicht so versiert sind, werden sie wahrscheinlich 001 anstelle von 1 eingeben wollen. Sie wissen nicht, was der Unterschied zwischen dem und nur +1 ist. Wenn Sie Festnetzanschlüsse zwischen Ortsvorwahlen (und manchmal in derselben Ortsvorwahl) anrufen, geben Sie vor dieser Nummer auch eine 1 ein. Genau wie in Japan.

Nimm Japan. Provinziale Festnetzanschlüsse werden mit einer 0 an der Vorderseite abgerufen. Wenn Sie jedoch von außerhalb Japans anrufen, benötigen Sie diese 0 nicht.

Mobiltelefonnummern in China sind 10-stellig und in Hongkong 8-stellig. Wenn Ihr Formular ein Land erfasst, fragen Sie nicht einmal nach dem Ländercode am Anfang der Nummer - zeigen Sie ihn einfach in schreibgeschütztem Text direkt neben an die Nummer, die sie eingeben müssen.

Die Liste geht weiter.

Überprüfen Sie einfach die Anzahl der Stellen (stellen Sie sicher, dass keine Buchstaben akzeptiert werden) und erleichtern Sie dem Endbenutzer die Eingabe der richtigen Anzahl von Stellen. Das heißt, sie müssen keine Landesvorwahl eingeben. Wenn Ihr Formular sehr intelligent ist, müssen sie möglicherweise nicht einmal die Ortsvorwahl eingeben, wenn es sich um eine Festnetznummer handelt. Oder wenn sie beginnen, Dinge wie einen Zugangscode wie 0 vor einer japanischen Nummer einzugeben, lassen Sie sie einfach wissen, dass sie das nicht müssen.

Jedes andere Zeichen außer Ziffern sollte dann ein strittiger Punkt sein - sie haben keine Chance, sie einzugeben.

Todd Main
quelle
1
Ich bin nicht damit einverstanden, sicherzustellen, dass keine Briefe akzeptiert werden - gehen Sie voran und akzeptieren Sie die, ignorieren Sie sie einfach. Menschen schreiben natürlich Erweiterungen mit einem führenden "x" (zB: 555-1212 x123). Warum das nicht zulassen? Menschen können es ganz gut analysieren, und wenn der Computer es verwenden muss, kann er die Nicht-Ziffern trivial entfernen.
Bryan Oakley
0

Google hat lib dafür:

Googles gemeinsame Java-, C ++ - und JavaScript-Bibliothek zum Parsen, Formatieren und Validieren internationaler Telefonnummern.

https://github.com/googlei18n/libphonennummer

Ich denke, es muss Fälle geben, die nicht behandelt werden, da dies keine leichte Aufgabe ist. Lassen Sie Benutzer Zahlen und Buchstaben eingeben und Buchstaben später mit Code entfernen.

Christophe Roussy
quelle