Ich möchte einen regulären Ausdruck für eine Standard-US-Telefonnummer schreiben, die die folgenden Formate unterstützt:
###-###-####
(###) ###-####
### ### ####
###.###.####
wobei # für eine beliebige Zahl steht. Bislang habe ich folgende Ausdrücke gefunden
^[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}
gefunden. Ich bin mir nicht ganz sicher, ob der letzte Ausdruck für die gepunktete Prüfung korrekt ist. Ich möchte auch wissen, ob es eine Möglichkeit gibt, einen einzigen Ausdruck anstelle der 4 verschiedenen Ausdrücke zu schreiben, die den verschiedenen Formaten entsprechen, die ich erwähnt habe. Wenn ja, bin ich mir nicht sicher, wie ich das anstellen soll. Und wie ändere ich den Ausdruck/die Ausdrücke so, dass ich auch eine Bedingung einfügen kann, um die Vorwahl als optionale Komponente zu unterstützen. Etwa so
+1 ### ### ####
wobei +1 die Ortsvorwahl ist und diese optional ist.
Wie wäre es damit?
^(\+?[01])?[-.\s]?\(?[1-9]\d{2}\)?[-.\s]?\d{3}[-.\s]?\d{4}
EDIT: Ich habe das () vergessen. EDIT 2: Ich habe den ersten 3-stelligen Teil falsch geschrieben.
Die Ausdrücke für 1, 3 und 4 sind recht ähnlich, so dass man sie verwenden kann:
^([1-9]\d{2})([- .])(\d{3})$2(\d{4})$
Beachten Sie, dass Sie je nach Sprache und Marke der verwendeten Regexe möglicherweise \2
anstelle von $2
einsetzen müssen oder dass eine solche Übereinstimmung überhaupt nicht unterstützt wird.
Ich sehe keine gute Möglichkeit, dies mit dem Format 2 zu kombinieren, abgesehen von dem offensichtlichen ^(regex für 1,3,4|regex für 2)$
, das hässlich und umständlich ist und es schwer macht, die Teile der Zahlen herauszubekommen.
Was die Ortsvorwahl betrifft, so können Sie (\+\d)?
an den Anfang setzen, um eine einstellige Ortsvorwahl zu erfassen (das Format Ihrer Ortsvorwahlen ist mir leider nicht bekannt).
^(\+1)?\s?(\([1-9]\d{2}\)|[1-9]\d{2})(-|\s|.)\d{3}(-|\s|.)\d{4}