Regulärer Ausdruck, der der 10-stelligen Standardtelefonnummer entspricht

125

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.

Noobcoder
quelle
5
Mögliches Duplikat von stackoverflow.com/questions/123559/… Die vorgeschlagene Antwort besteht darin, jedes nichtstellige Zeichen zu entfernen . Auf diese Weise vereinfachen Sie die Validierung
Arnaud Denoyelle
1
Ich weiß, dass dies eine Weile her ist, aber ich glaube nicht, dass US-Vorwahlen mit 1 beginnen können. (123) 456-7890 wäre wegen des führenden 1.
Bobanahalf
Für eine vollständigere richtige Antwort siehe: stackoverflow.com/a/18626090/561710
Joe Johnston
Das Parsen von Telefonnummern ist schwierig. Google hat dafür eine Open-Source-Bibliothek veröffentlicht. Bedienen Sie sich selbst, verwenden Sie libphonenumber (oder eine Gabelung in Ihrer Sprache)
aloisdg wechselt zu codidact.com

Antworten:

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

Entspricht dem Folgenden

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 hat, machen Sie die Trennzeichenklasse optional als, wenn Sie auch daran interessiert sind, unformatierte Zahlen abzugleichen[\s.-]?

^(\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}$
Ravi Thapliyal
quelle
1
Denken Sie, dass das Fragezeichen in (? \ D {3}) Teil Ihrer allerersten Zeile nicht erforderlich ist? Ich denke, wir brauchen ein oder mehrere Vorkommen und nicht null oder ein Vorkommen einer Ziffer innerhalb des '(' und ')'
Noobcoder
2
Das ?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.
Ravi Thapliyal
6
Hinweis: Dies stimmt nicht mit 1234567890 überein, was möglicherweise ein Problem darstellt oder nicht. für mich war es - also habe ich ?nach jedem hinzugefügt [\s.-], um es optional zu machen
Simon_Weaver
1
@ Simon_Weaver Vielen Dank für Ihre Beiträge. Ich habe Ihre Beobachtung zur Antwort hinzugefügt.
Ravi Thapliyal
3
Wenn Sie eine möchten, die das erwähnte Problem @BobRay vermeidet, verwenden Sie ^(\+\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)
Shrey Gupta
128

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.

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

Es würde den folgenden Beispielen und vielem mehr entsprechen:

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

  • Gruppe 1: Ländercode (Beispiel: 1 oder 86)
  • Gruppe 2: Vorwahl (Beispiel: 800)
  • Gruppe 3: Austausch (Beispiel: 555)
  • Gruppe 4: Teilnehmernummer (Beispiel: 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 einfach ein Fragezeichen nach (\ d {3}) für die Vorwahl ein.

Francis Gagnon
quelle
7
beste Antwort IMHO. Für meinen Zweck werden die \sam Anfang und am Ende nicht benötigt, da ich sie zur Validierung verwende und das Feld bereits zugeschnitten ist.
Daniel
1
Mit Abstand die beste und vollständigste Antwort. Ich schätze auch die Regex-Aufteilung sehr.
Bryant Jackson
@Kondal Ich bin neugierig auf die Eingabe, die Sie verwenden, damit es fehlschlägt. Es scheint gut für mich mit einer 0 für den Ländercode zu funktionieren.
Francis Gagnon
<input type = "text" name = "phone_no" class = "form-control" ng-pattern = "^ \ s * (?: \ +? (\ d {1,3}))? [-. (] * (\ d {3}) [-.)] * (\ d {3}) [-.] * (\ d {4}) (?: * x (\ d +))? \ s * $ " -numbers ng-maxlength = "10" />
Kondal
@Kondal Entschuldigung. Ich meinte, der Text, den Sie abgleichen möchten, schlägt mit diesem regulären Ausdruck fehl.
Francis Gagnon
8

^(\+\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

Stomie
quelle
7

Hier ist eine ziemlich kompakte, die ich erstellt habe.

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

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

Getestet gegen die folgenden 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
Puneet Lamba
quelle
Dies passt zu Sachen wie (800 444-4444
Jake
6

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.

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

Siehe Beispiel hier

Avinash Lad
quelle
4

Versuchen Sie dies für pakistanische Benutzer. Hier ist eine ziemlich kompakte, die ich erstellt habe.

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

Getestet gegen die folgenden Anwendungsfälle.

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

Telefonnummer Regex, die ich benutze: /^[+]?(\d{1,2})?[\s.-]?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}$/

Umfasst:

  • 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
Yevhen Kotliar
quelle
2

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

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

Beachten Sie, dass Sie je nach Sprache und Marke der verwendeten regulären Ausdrücke möglicherweise \2stattdessen setzen müssen, $2oder 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).

Vedran Šego
quelle
2

Wie wäre es damit?

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

EDIT: Ich habe die () vergessen. EDIT 2: Der erste dreistellige Teil ist falsch.

purpurroter_penguin
quelle
.In einer Zeichenklasse muss kein Punkt [-\.\s]ausgeblendet werden [-.\s], sollte dies auch sein , da wir keinen Backslash verwenden möchten.
Vedran Šego
Würde es tatsächlich zum Backslash passen? Ich dachte, es wäre vielleicht nicht notwendig, aber ich war mir nicht 100% sicher.
Crimson_penguin
Du hast recht. Ich habe es gerade versucht (ich brauchte noch nie einen Backslash) [\.]und [.]beide stimmen nur mit Punkt überein, während [\\.]sowohl Punkt als auch Backslash übereinstimmen. Vielen Dank für Ihre Bemerkung.
Vedran Šego
Meine Meinung zu Regexes ist, dass, wenn Sie jemandem einen Regex geben, Sie ihm immer eine Erklärung beilegen, oder der Regex wertlos ist. Nur meine Meinung.
John Red
2

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

Bestimmtes:

  • Es sollte mit einer 2 (oder höher) beginnen.
  • Es kann nicht "11" als zweite und dritte Ziffer (N11) haben.

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:

^((\+\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 benötigt wird), 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 Zahlen (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 zum Extrahieren der Zifferngruppen, kann jedoch geändert werden, um diese einzuschließen.

MCattle
quelle
2

Vielleicht der 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

MITHU
quelle
Perfekt ... Danke (y)
Sushil Sharma
2

Diese Vorwahl stimmt mit einer US- oder kanadischen Telefonnummer überein und stellt außerdem sicher, dass es sich um eine gültige Vorwahl handelt.

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

Test auf Regex101.com

Shino
quelle
2

Regex-Muster zur Validierung einer regulären 10-stelligen Telefonnummer plus optionalem internationalen 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
bcngr
quelle
1

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

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

Referenz : https://regex101.com/r/QeQewP/1

Erläuterung:

Geben Sie hier die Bildbeschreibung ein

Amitesh Bharti
quelle
Haben Sie ein Tool verwendet, um diese Erklärung zu generieren? Teile es! Danke
unbekannt
@unnknown Sieht aus wie ein Screenshot eines Online-Regex-Checkers wie regex101.com. Beachten Sie, dass in den SO-Richtlinien festgelegt ist, dass alle Text-, Code-, Daten- und Fehlermeldungen in Textform und nicht in Bildern eingegeben werden müssen, da Text in Bildern insbesondere auf Mobilgeräten schwer lesbar sein kann und eine größere Bandbreite erfordert. Auch Text kann nicht kopiert werden. In diesem Fall können die Farben etwas hinzufügen, nicht sicher. Wisse, dass "Antworten" im Allgemeinen eine Texterklärung enthalten sollte. Amitesh: Es wäre nützlich, einen Link zu dieser Site einzufügen, wobei Ihr regulärer Ausdruck bereits ausgefüllt ist, damit Besucher damit experimentieren können.
SherylHohman
@unnknown hier ist ein Link, der ein Bild ähnlich dem in diesem Beitrag erzeugt. Amiteshs Regex-Zeichenfolge wurde bereits eingefügt. Sie können Telefonnummern eingeben, um die Ergebnisse zu testen: regex101.com/r/QeQewP/1
SherylHohman
0
^(\+1)?\s?(\([1-9]\d{2}\)|[1-9]\d{2})(-|\s|.)\d{3}(-|\s|.)\d{4}
verschmelzen
quelle
0

Dies ist eine umfassendere Version, die so gut wie möglich zusammenpasst und Ihnen Gruppenabgleiche für Land, Region, Erste und Letzte bietet.

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

Was ist mit mehreren Zahlen mit "+" und trennen Sie sie mit ";" "," "-" oder "" Zeichen?

Entwickler
quelle
0

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

Kelly Milligan
quelle
0

Ü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:

^\s*(?:\+?(\d{1,3}))?[\W\D\s]*(\d[\W\D\s]*?\d[\D\W\s]*?\d)[\W\D\s]*(\d[\W\D\s]*?\d[\D\W\s]*?\d)[\W\D\s]*(\d[\W\D\s]*?\d[\D\W\s]*?\d[\W\D\s]*?\d)(?: *x(\d+))?\s*$

Testen Sie es hier Codepen: https://codepen.io/kiranbhattarai/pen/NWKMXQO

Erläuterung des regulären Ausdrucks: https://regexr.com/4kt5j


Version 2:

\s*(?:\+?(\d{1,3}))?[\W\D\s]^|()*(\d[\W\D\s]*?\d[\D\W\s]*?\d)[\W\D\s]*(\d[\W\D\s]*?\d[\D\W\s]*?\d)[\W\D\s]*(\d[\W\D\s]*?\d[\D\W\s]*?\d[\W\D\s]*?\d)(?: *x(\d+))?\s*$

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.

Codepen: https://codepen.io/kiranbhattarai/pen/GRKGNGG

Erläuterung des regulären Ausdrucks: https://regexr.com/4kt9n


Wenn Sie ein Muster finden, das fehlschlagen kann, kommentieren Sie bitte, ich werde es beheben.

Testfälle: Bestanden

8 0   0  4  4  4  5   55 5
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
800 (555) 1234
800(555)1234
8 0 0 5 5 5 1 2 3 4
8.0.0.5.5.5.1.2.3.4
8-0-0-5-5-5-1-2-3-4
(8)005551234
(80)05551234
8(00)5551234
8@0@0@5551234
8/0/0/5/5/5/1/2/3/4
8*0*0*5*5*5*1*2*3*4
8:0:0:5:5:5:1:2:3:4
8,0,0,5,5,5,1,2,3,4
800,555,1234
800:555:1234
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
+99 1234567890
+991234567890
(555) 444-6789
555-444-6789
555.444.6789
555 444 6789
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
Kiran Bhattarai
quelle
+86, +99 usw. sind definitiv keine US-Telefonnummern. Einige Ihrer anderen Testfälle sehen aus anderen Gründen zweifelhaft aus.
Tripleee
@tripleee lass mich das beheben, ich habe es auf jedes Land aktualisiert, von dem ich hoffe, dass es funktioniert. Zusätzlich habe ich auch die doppelten Testfälle entfernt
Kiran Bhattarai
0

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

((?:\s|^)(?:\+\d{1,3}\s?)?1?\-?\.?\s?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4})(?:\b)
hobberwickey
quelle