it-swarm.com.de

Regulärer Ausdruck für die 10-stellige Standardnummer

Ich möchte einen regulären Ausdruck für eine Standard-US-amerikanische Telefonnummer schreiben, die die folgenden Formate unterstützt:

###-###-####
(###) ###-####
### ### ####
###.###.####

dabei bedeutet # eine beliebige Zahl. Bisher 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}

beziehungsweise. Ich bin nicht ganz sicher, ob der letzte Punkt für die punktierte Prüfung richtig ist. Ich möchte auch wissen, ob es eine Möglichkeit gibt, einen einzelnen Ausdruck zu schreiben, anstatt vier verschiedene, die den verschiedenen Formaten entsprechen, die ich erwähnt habe. Wenn ja, bin ich mir nicht sicher, wie ich das mache. Und wie ändere ich auch den Ausdruck/die Ausdrücke, so dass ich eine Bedingung zur Unterstützung der Ortskennzahl als optionale Komponente hinzufügen kann. So etwas wie

+1 ### ### ####

wobei +1 die Vorwahl ist und optional ist.

85
noobcoder
^(\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]\d{3}[\s.-]\d{4}$

Stimmt mit dem folgenden überein

123-456-7890
(123) 456-7890
123 456 7890
123.456.7890
+91 (123) 456-7890

Wenn Sie keine Übereinstimmung mit Nicht-US-Nummern wünschen, verwenden Sie

^(\+0?1\s)?\(?\d{3}\)?[\s.-]\d{3}[\s.-]\d{4}$

Update:
Wie der Benutzer Simon Weaver unten bemerkt, machen Sie die Trennzeichenklasse optional als [\s.-]?, wenn Sie auch an unformatierten Zahlen interessiert sind.

^(\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}$
149
Ravi Thapliyal

Für dieses Problem sind viele Variationen möglich. Hier ist ein regulärer Ausdruck, der einer Antwort ähnelt, die ich zuvor auf SO gestellt habe. 

^\s*(?:\+?(\d{1,3}))?[-. (]*(\d{3})[-. )]*(\d{3})[-. ]*(\d{4})(?: *x(\d+))?\s*$

Es würde die folgenden Beispiele und noch viel mehr zusammenbringen:

18005551234
1 800 555 1234
+1 800 555-1234
+86 800 555 1234
1-800-555-1234
1 (800) 555-1234
(800)555-1234
(800) 555-1234
(800)5551234
800-555-1234
800.555.1234
800 555 1234x5678
8005551234 x5678
1    800    555-1234
1----800----555-1234

Unabhängig von der Eingabe der Telefonnummer können Sie mit Hilfe der Erfassungsgruppen die Telefonnummer aufschlüsseln, um sie in Ihrem Code zu verarbeiten.

  • Gruppe1: Ländercode (z. B. 1 oder 86)
  • Gruppe2: Vorwahl (ex: 800)
  • Gruppe 3: Austausch (ex: 555)
  • Gruppe4: Teilnehmernummer (ex: 1234)
  • Gruppe 5: Erweiterung (Beispiel: 5678)

Hier ist eine Aufschlüsselung des Ausdrucks, wenn Sie interessiert sind:

^\s*                #Line start, match any whitespaces at the beginning if any.
(?:\+?(\d{1,3}))?   #GROUP 1: The country code. Optional.
[-. (]*             #Allow certain non numeric characters that may appear between the Country Code and the Area Code.
(\d{3})             #GROUP 2: The Area Code. Required.
[-. )]*             #Allow certain non numeric characters that may appear between the Area Code and the Exchange number.
(\d{3})             #GROUP 3: The Exchange number. Required.
[-. ]*              #Allow certain non numeric characters that may appear between the Exchange number and the Subscriber number.
(\d{4})             #Group 4: The Subscriber Number. Required.
(?: *x(\d+))?       #Group 5: The Extension number. Optional.
\s*$                #Match any ending whitespaces if any and the end of string.

Um die Vorwahl optional zu machen, fügen Sie hinter (\ d {3}) ein Fragezeichen für die Vorwahl ein.

95
Francis Gagnon

Hinzufügen eines Beispiels unter Verwendung der oben genannten Lösungen auf jsfiddle . Ich habe den Code entsprechend den Anforderungen meiner Kunden etwas geändert. Hoffe das hilft auch jemandem.

/^\s*(?:\+?(\d{1,3}))?[- (]*(\d{3})[- )]*(\d{3})[- ]*(\d{4})(?: *[x/#]{1}(\d+))?\s*$/

Siehe Beispiel hier

6
Avinash Lad

Hier ist ein ziemlich kompakter, den ich erstellt habe.

Search: \+?1?\s*\(?-*\.*(\d{3})\)?\.*-*\s*(\d{3})\.*-*\s*(\d{4})$

Replace: +1 \($1\) $2-$3

Getestet gegen folgende Anwendungsfälle.

18001234567
1 800 123 4567
1-800-123-4567
+18001234567
+1 800 123 4567
+1 (800) 123 4567
1(800)1234567
+1800 1234567
1.8001234567
1.800.123.4567
1--800--123--4567
+1 (800) 123-4567
4
Puneet Lamba

Telefonnummer regulärer Ausdruck, den ich verwende: /^[+]?(\d{1,2})?[\s.-]?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}$/

Abdeckungen:

  • 18001234567
  • 1 800 123 4567
  • +1 800 123-4567
  • +86 800 123 4567
  • 1-800-123-4567
  • 1 (800) 123-4567
  • (800)123-4567
  • (800) 123-4567
  • (800) 1234567
  • 800-123-4567
  • 800.123.4567
4
Yevhen Kotliar

versuchen Sie dies für pakistanische Benutzer. Hier ist ein ziemlich kompakter, den ich erstellt habe.

((\+92)|0)[.\- ]?[0-9][.\- ]?[0-9][.\- ]?[0-9]

Getestet gegen folgende Anwendungsfälle.

+92 -345 -123 -4567
+92 333 123 4567
+92 300 123 4567
+92 321 123 -4567
+92 345 - 540 - 5883
3
sajid

Wie wäre es damit?

^(\+?[01])?[-.\s]?\(?[1-9]\d{2}\)?[-.\s]?\d{3}[-.\s]?\d{4}

EDIT: Ich habe den () vergessen . EDIT 2: Der erste 3-stellige Teil ist falsch.

2
crimson_penguin

^(\+\d{1,2}\s?)?1?\-?\.?\s?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}$

Entspricht diesen Telefonnummern:

1-718-444-1122
718-444-1122
(718)-444-1122
17184441122
7184441122
718.444.1122
1718.444.1122
1-123-456-7890
1 123-456-7890
1 (123) 456-7890
1 123 456 7890
1.123.456.7890
+91 (123) 456-7890
18005551234
1 800 555 1234
+1 800 555-1234
+86 800 555 1234
1-800-555-1234
1 (800) 555-1234
(800)555-1234
(800) 555-1234
(800)5551234
800-555-1234
800.555.1234
18001234567
1 800 123 4567
1-800-123-4567
+18001234567
+1 800 123 4567
+1 (800) 123 4567
1(800)1234567
+1800 1234567
1.8001234567
1.800.123.4567
+1 (800) 123-4567
18001234567
1 800 123 4567
+1 800 123-4567
+86 800 123 4567
1-800-123-4567
1 (800) 123-4567
(800)123-4567
(800) 123-4567
(800)1234567
800-123-4567
800.123.4567
1231231231
123-1231231
123123-1231
123-123 1231
123 123-1231
123-123-1231
(123)123-1231
(123)123 1231
(123) 123-1231
(123) 123 1231
+99 1234567890
+991234567890
(555) 444-6789
555-444-6789
555.444.6789
555 444 6789
18005551234
1 800 555 1234
+1 800 555-1234
+86 800 555 1234
1-800-555-1234
1.800.555.1234
+1.800.555.1234
1 (800) 555-1234
(800)555-1234
(800) 555-1234
(800)5551234
800-555-1234
800.555.1234
(003) 555-1212
(103) 555-1212
(911) 555-1212
18005551234
1 800 555 1234
+86 800-555-1234
1 (800) 555-1234

Siehe regex101.com

2
stomy

Die Ausdrücke für 1, 3 und 4 sind ziemlich ähnlich. Sie können also Folgendes verwenden:

^([1-9]\d{2})([- .])(\d{3})$2(\d{4})$

Beachten Sie, dass Sie je nach Sprache und Marke der verwendeten Ausdrücke möglicherweise \2 anstelle von $2 eingeben müssen. Andernfalls wird ein solcher Abgleich möglicherweise überhaupt nicht unterstützt.

Ich sehe keine gute Möglichkeit, dies mit dem Format 2 zu kombinieren, abgesehen von der offensichtlichen ^(regex for 1,3,4|regex for 2)$, die hässlich und unbeholfen ist und es schwierig macht, die Teile der Zahlen herauszufinden.

Was die Vorwahl angeht, können Sie am Anfang (\+\d)? hinzufügen, um eine einstellige Vorwahl zu erfassen (leider kenne ich das Format Ihrer Vorwahl nicht).

2
Vedran Šego

Dieser Code stimmt mit einer US-amerikanischen oder kanadischen Telefonnummer überein und stellt außerdem sicher, dass es sich um eine gültige Vorwahl und einen gültigen Austausch handelt:

^((\+1)?[\s-]?)?\(?[2-9]\d\d\)?[\s-]?[2-9]\d\d[\s-]?\d\d\d\d

Auf Regex101.com testen

2
Shino

Regex-Muster zur Validierung einer normalen 10-stelligen Telefonnummer plus optionaler internationaler Code (1 bis 3 Ziffern) und optionaler Nebenstellennummer (beliebig viele Ziffern):

/(\+\d{1,3}\s?)?((\(\d{3}\)\s?)|(\d{3})(\s|-?))(\d{3}(\s|-?))(\d{4})(\s?(([E|e]xt[:|.|]?)|x|X)(\s?\d+))?/g

Demo: https://www.regextester.com/103299

Gültige Einträge: 

/* Full number */
+999 (999) 999-9999 Ext. 99999

/* Regular local phone number (XXX) XXX-XXXX */
1231231231
123-1231231
123123-1231
123-123 1231
123 123-1231
123-123-1231
(123)123-1231
(123)123 1231
(123) 123-1231
(123) 123 1231

/* International codes +XXX (XXX) XXX-XXXX */
+99 1234567890
+991234567890

/* Extensions (XXX) XXX-XXXX Ext. XXX... */
1234567890 Ext 1123123
1234567890Ext 1123123
1234567890 Ext1123123
1234567890Ext1123123

1234567890 Ext: 1123123
1234567890Ext: 1123123
1234567890 Ext:1123123
1234567890Ext:1123123

1234567890 Ext. 1123123
1234567890Ext. 1123123
1234567890 Ext.1123123
1234567890Ext.1123123

1234567890 ext 1123123
1234567890ext 1123123
1234567890 ext1123123
1234567890ext1123123

1234567890 ext: 1123123
1234567890ext: 1123123
1234567890 ext:1123123
1234567890ext:1123123

1234567890 X 1123123
1234567890X1123123
1234567890X 1123123
1234567890 X1123123
1234567890 x 1123123
1234567890x1123123
1234567890 x1123123
1234567890x 1123123
2
bocanegra

Vielleicht das einfachste im Vergleich zu mehreren anderen.

\(?\d+\)?[-.\s]?\d+[-.\s]?\d+

Es entspricht dem folgenden:

(555) 444-6789 

555-444-6789

555.444.6789 

555 444 6789

1
MITHU

was ist mit mehreren Zahlen mit "+" und trennen Sie diese mit ";" "," "-" oder "" Zeichen?

0
radeveloper

Ich finde diesen regulären Ausdruck für eine 10-stellige Kontaktnummer am nützlichsten: 

^(?:(?:\+|0{0,2})91(\s*[\-]\s*)?|[0]?)?[789]\d{9}$

Erklärung: 

 enter image description here

0
Amitesh

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 Dinge wie holländische Zahlen berücksichtigen

+358 300 20200

0
Kelly Milligan

Dies ist eine umfassendere Version, die so gut passt, wie ich mir vorstellen kann, als auch Gruppenübereinstimmung für Land, Region, zuerst und zuletzt. 

(?<number>(\+?(?<country>(\d{1,3}))(\s|-|\.)?)?(\(?(?<region>(\d{3}))\)?(\s|-|\.)?)((?<first>(\d{3}))(\s|-|\.)?)((?<last>(\d{4}))))
0
jake

Beginnend mit der Antwort von @ Ravi habe ich auch einige Validierungsregeln für den NPA (Area) Code angewendet.

Im Speziellen:

  • Es sollte mit einer 2 (oder höher) beginnen
  • Es darf nicht "11" als zweite und dritte Stelle (N11) enthalten.

Es gibt ein paar andere Einschränkungen, einschließlich reservierter Blöcke (N9X, 37X, 96X) und 555, aber ich habe diese ausgelassen, insbesondere, weil die reservierten Blöcke möglicherweise in Zukunft verwendet werden können.

Das ist was ich mir ausgedacht habe:

^((\+\d{1,2}|1)[\s.-]?)?\(?[2-9](?!11)\d{2}\)?[\s.-]?\d{3}[\s.-]?\d{4}$

Wenn Sie auch leere Werte abgleichen möchten (wenn das Feld nicht erforderlich ist), können Sie alternativ Folgendes verwenden:

(^((\+\d{1,2}|1)[\s.-]?)?\(?[2-9](?!11)\d{2}\)?[\s.-]?\d{3}[\s.-]?\d{4}$|^$)

Meine Testfälle für gültige Nummern (viele aus der Antwort von @Francis) sind:

18005551234
1 800 555 1234
+1 800 555-1234
+86 800 555 1234
1-800-555-1234
1.800.555.1234
+1.800.555.1234
1 (800) 555-1234
(800)555-1234
(800) 555-1234
(800)5551234
800-555-1234
800.555.1234

Meine ungültigen Testfälle umfassen:

(003) 555-1212     // Area code starts with 0
(103) 555-1212     // Area code starts with 1
(911) 555-1212     // Area code ends with 11
180055512345       // Too many digits
1 800 5555 1234    // Prefix code too long
+1 800 555x1234    // Invalid delimiter
+867 800 555 1234  // Country code too long
1-800-555-1234p    // Invalid character
1 (800)  555-1234  // Too many spaces
800x555x1234       // Invalid delimiter
86 800 555 1212    // Non-NA country code doesn't have +

Mein regulärer Ausdruck enthält keine Gruppierung, um die Zifferngruppen zu extrahieren. Sie kann jedoch so geändert werden, dass sie diese enthält.

0
MCattle
^(\+1)?\s?(\([1-9]\d{2}\)|[1-9]\d{2})(-|\s|.)\d{3}(-|\s|.)\d{4}
0
amalgamate