Ich möchte einen regulären Ausdruck für eine Standardtelefonnummer vom Typ US schreiben, die die folgenden Formate unterstützt:
###-###-####
(###) ###-####
### ### ####
###.###.####
Dabei bedeutet # eine beliebige Zahl. Bisher habe ich mir folgende Ausdrücke ausgedacht
^[1-9]\d{2}-\d{3}-\d{4}
^\(\d{3}\)\s\d{3}-\d{4}
^[1-9]\d{2}\s\d{3}\s\d{4}
^[1-9]\d{2}\.\d{3}\.\d{4}
beziehungsweise. Ich bin mir nicht ganz sicher, ob der letzte für den gepunkteten Scheck korrekt ist. Ich möchte auch wissen, ob es eine Möglichkeit gibt, einen einzelnen Ausdruck anstelle der 4 verschiedenen zu schreiben, die den verschiedenen von mir erwähnten Formaten entsprechen. Wenn ja, bin ich mir nicht sicher, wie ich das mache. Und wie ändere ich den Ausdruck / die Ausdrücke so, dass ich auch eine Bedingung zur Unterstützung der Vorwahl als optionale Komponente einfügen kann? Etwas wie
+1 ### ### ####
Dabei ist +1 die Vorwahl und optional.
Antworten:
Entspricht dem Folgenden
Wenn Sie keine Übereinstimmung mit Nicht-US-Nummern wünschen, verwenden Sie
Update:
Wie der Benutzer Simon Weaver unten bemerkt hat, machen Sie die Trennzeichenklasse optional als, wenn Sie auch daran interessiert sind, unformatierte Zahlen abzugleichen
[\s.-]?
quelle
?
dort gilt für Klammern()
, nicht für die Ziffern. Die vollständige verwandte Regex ist\(?\d{3}\)?
.\d{3}
Gibt an, dass drei Ziffern zwischen den()
optionalen (von?
) (gemacht ) sein müssen.?
nach jedem hinzugefügt[\s.-]
, um es optional zu machen^(\+\d{1,2}\s)?((\(\d{3}\))|(\d{3}))[\s.-]\d{3}[\s.-]\d{4}$
. (Ich habe im Grunde nur das Segment der RegEx dupliziert, das die Vorwahl abdeckt, und eine Variante mit und eine ohne Parens zugelassen)Für dieses Problem sind viele Variationen möglich. Hier ist ein regulärer Ausdruck ähnlich einer Antwort, die ich zuvor auf SO gestellt habe.
Es würde den folgenden Beispielen und vielem mehr entsprechen:
Unabhängig von der Art und Weise, wie die Telefonnummer eingegeben wird, können die Erfassungsgruppen verwendet werden, um die Telefonnummer aufzuschlüsseln, damit Sie sie in Ihrem Code verarbeiten können.
Hier ist eine Aufschlüsselung des Ausdrucks, wenn Sie interessiert sind:
Um die Vorwahl optional zu machen, fügen Sie einfach ein Fragezeichen nach (\ d {3}) für die Vorwahl ein.
quelle
\s
am Anfang und am Ende nicht benötigt, da ich sie zur Validierung verwende und das Feld bereits zugeschnitten ist.^(\+\d{1,2}\s?)?1?\-?\.?\s?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}$
Entspricht diesen Telefonnummern:
Siehe regex101.com
quelle
Hier ist eine ziemlich kompakte, die ich erstellt habe.
Getestet gegen die folgenden Anwendungsfälle.
quelle
Addieren eines Beispiels mit den oben genannten Lösungen auf jsfiddle. Ich habe den Code ein wenig gemäß den Anforderungen meiner Kunden geändert. Hoffe das hilft auch jemandem.
Siehe Beispiel hier
quelle
Versuchen Sie dies für pakistanische Benutzer. Hier ist eine ziemlich kompakte, die ich erstellt habe.
Getestet gegen die folgenden Anwendungsfälle.
quelle
Telefonnummer Regex, die ich benutze:
/^[+]?(\d{1,2})?[\s.-]?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}$/
Umfasst:
quelle
Die Ausdrücke für 1, 3 und 4 sind ziemlich ähnlich, daher können Sie Folgendes verwenden:
Beachten Sie, dass Sie je nach Sprache und Marke der verwendeten regulären Ausdrücke möglicherweise
\2
stattdessen setzen müssen,$2
oder dass ein solcher Abgleich möglicherweise überhaupt nicht unterstützt wird.Ich sehe keinen guten Weg, dies mit dem Format 2 zu kombinieren, abgesehen von dem offensichtlichen,
^(regex for 1,3,4|regex for 2)$
das hässlich und ungeschickt ist und es schwierig macht, die Teile der Zahlen herauszuholen.Die Vorwahl können Sie
(\+\d)?
am Anfang hinzufügen , um eine einstellige Vorwahl zu erfassen (das Format Ihrer Vorwahlen ist mir leider nicht bekannt).quelle
Wie wäre es damit?
EDIT: Ich habe die () vergessen. EDIT 2: Der erste dreistellige Teil ist falsch.
quelle
.
In einer Zeichenklasse muss kein Punkt[-\.\s]
ausgeblendet werden[-.\s]
, sollte dies auch sein , da wir keinen Backslash verwenden möchten.[\.]
und[.]
beide stimmen nur mit Punkt überein, während[\\.]
sowohl Punkt als auch Backslash übereinstimmen. Vielen Dank für Ihre Bemerkung.Beginnend mit der Antwort von @ Ravi habe ich auch einige Validierungsregeln für den NPA (Area) Code angewendet .
Bestimmtes:
Es gibt einige andere Einschränkungen, einschließlich reservierter Blöcke (N9X, 37X, 96X) und 555, aber ich habe diese weggelassen, insbesondere weil die reservierten Blöcke möglicherweise zukünftig verwendet werden und 555 zum Testen nützlich ist.
Folgendes habe ich mir ausgedacht:
Wenn Sie auch leere Werte abgleichen möchten (wenn das Feld nicht benötigt wird), können Sie alternativ Folgendes verwenden:
Meine Testfälle für gültige Zahlen (viele aus der Antwort von @Francis) sind:
Meine ungültigen Testfälle umfassen:
Mein regulärer Ausdruck enthält keine Gruppierung zum Extrahieren der Zifferngruppen, kann jedoch geändert werden, um diese einzuschließen.
quelle
Vielleicht der einfachste im Vergleich zu mehreren anderen.
Es entspricht dem Folgenden:
quelle
Diese Vorwahl stimmt mit einer US- oder kanadischen Telefonnummer überein und stellt außerdem sicher, dass es sich um eine gültige Vorwahl handelt.
Test auf Regex101.com
quelle
Regex-Muster zur Validierung einer regulären 10-stelligen Telefonnummer plus optionalem internationalen Code (1 bis 3 Ziffern) und optionaler Nebenstellennummer (beliebig viele Ziffern):
Demo: https://www.regextester.com/103299
Gültige Einträge:
quelle
Ich finde diesen regulären Ausdruck für mich am nützlichsten für eine 10-stellige Kontaktnummer:
Referenz : https://regex101.com/r/QeQewP/1
Erläuterung:
quelle
quelle
Dies ist eine umfassendere Version, die so gut wie möglich zusammenpasst und Ihnen Gruppenabgleiche für Land, Region, Erste und Letzte bietet.
quelle
Was ist mit mehreren Zahlen mit "+" und trennen Sie sie mit ";" "," "-" oder "" Zeichen?
quelle
Ich endete mit
const regexBase = '(?:\\+?(\\d{1,3}))?[-. (]*(\\d{3})?[-. )]*(\\d{3})[-. ]*(\\d{4,5})(?: *x(\\d+))?'; const phoneRegex = new RegExp('\\s*' + regexBase + '\\s*', 'g');
Dies sollte zum Beispiel niederländische Zahlen berücksichtigen
+358 300 20200
quelle
Über Regex befindet sich eine geringfügige Modifikation von
@Francis Gagnon.
Ziel: Um ein mögliches Muster zu erkennen, kann ein Benutzer seine US-Telefonnummer teilen
Version 1:
Version 2:
Was ist drin: Die Testfälle können Teil der Zeichenfolge sein. In Version 1 sollten die Testfälle ein Anfang einer zu arbeitenden Zeile sein.
Wenn Sie ein Muster finden, das fehlschlagen kann, kommentieren Sie bitte, ich werde es beheben.
Testfälle: Bestanden
quelle
Ich werfe diese Antwort nur hinein, da sie ein Problem von mir löst. Sie basiert auf der Antwort von @ Stormy, enthält jedoch dreistellige Ländercodes und kann, was noch wichtiger ist, überall in einer Zeichenfolge verwendet werden, stimmt aber nicht überein, ist es nicht vorangestellt durch ein Leerzeichen / Anfang der Zeichenfolge und endend mit einer Wortgrenze. Dies ist nützlich, damit keine Zufallszahlen in der Mitte einer URL oder Ähnlichem gefunden werden
quelle