Regex für die Validierung australischer Telefonnummern

Lesezeit: 3 Minuten

Ich habe unten Regex für die Validierung von Telefonnummern ausprobiert, aber es hat nicht richtig funktioniert,

^([+61|0](2|4|3|7|8|)){0,2}([ 0-9]|[(]){2,3}([)]|[0-9]){6}([ ])[0-9]{7,20}$

Hier sind Beispiele, von denen ich erwarte, dass sie die Validierung bestehen

+61(02)89876544
+61 2 8986 6544
02 8986 6544
+61289876544
0414 570776 
0414570776
0414 570 776
+61 414 570776
+61 (0)414 570776

Die folgenden Zeichen werden ebenfalls akzeptiert. ()-+ Leerzeichen

  • Sind nicht +61(02)89876544 und +61 (0)414 570776 ungültig? Solltest du das nicht fallen lassen 0 aus der Vorwahl if +61 ist enthalten.

    – nnnnn

    12. Oktober 2016 um 5:42 Uhr


Regex fur die Validierung australischer Telefonnummern
3ozän

Das ist ziemlich die Struktur der Telefonnummer. Die einfachste Lösung besteht darin, den Benutzer zur Eingabe in einem bestimmten Format aufzufordern oder das Formular automatisch formatieren zu lassen. Wenn Sie eine Regex verwenden müssen, habe ich mir Folgendes ausgedacht:

^(?:\+?(61))? ?(?:\((?=.*\)))?(0?[2-57-8])\)? ?(\d\d(?:[- ](?=\d{3})|(?!\d\d[- ]?\d[- ]))\d\d[- ]?\d[- ]?\d{3})$

Erfassungsgruppen:

  1. Ländercode (optional)
  2. Orts-/Anbieterkennzahl (optional)
  3. Die Telefonnummer

Demo: https://regex101.com/r/dkFASs/6

So habe ich das Format festgelegt: https://en.wikipedia.org/wiki/Telephone_numbers_in_Australia

Wenn ich eine größere Regex wie diese in Angriff nehme, ist es meiner Meinung nach am einfachsten, Ihre Testfälle in ein Tool wie z regex101.com und dann Capture-Gruppe für Capture-Gruppe (benennen Sie sie, wenn Sie können), bis Sie am Ende angelangt sind. Sobald eine Gruppe nicht passt, ändern Sie, was Sie bereits haben, bis es passt.

Bearbeiten 2019: Da diese Frage gelegentlich immer noch Aufmerksamkeit erregt, wollte ich darauf hinweisen, dass es möglicherweise besser ist, wenn möglich eine Validierungsbibliothek zu verwenden. Mein Vorschlag wäre Googles i18n-Bibliothek für Telefonnummern. Es ist viel robuster, als es eine Regex jemals sein könnte.

  • sieht gut aus, ich muss auch min 7 max 20 zeichenlimit setzen

    – KRR

    12. Oktober 2016 um 4:59 Uhr

  • Was meinen Sie? Diese Regex stimmt mit genau 8 Ziffern mit optionaler Vorwahl (optional Null gefolgt von 1, 2, 3, 4,5, 7 oder 8) und optionaler Ländervorwahl (optional + dann 64) überein. Wenn die Regex länger ist, liegt dies entweder an den Leerzeichen oder Bindestrichen darin oder wahrscheinlicher am abschließenden Leerzeichen am Ende. Bearbeiten: Ich hoffe, Sie meinen nicht, dass die Regex-Länge weniger als 20 Zeichen betragen muss …

    – 3ozän

    12. Oktober 2016 um 5:03 Uhr


  • Die Länge der Telefonnummer sollte 7 bis 20 betragen und Musterfehler zeigen den JavaScript-Modus in der an regex101.com

    – KRR

    12. Oktober 2016 um 5:09 Uhr

  • @KRR Ich habe es aktualisiert, um die JavaScript-Engine zu verwenden (ich hätte früher prüfen sollen, welche) und die längstmögliche Übereinstimmung in die Liste der Testeingaben aufgenommen (es sind 19 Zeichen).

    – 3ozän

    12. Oktober 2016 um 5:26 Uhr

  • @KRR, diese Antwort scheint von Zeit zu Zeit Aufmerksamkeit zu erregen. Wenn Ihre Frage damit beantwortet wurde, können Sie sie bitte als akzeptierte Antwort markieren, oder falls dies nicht der Fall ist, erläutern Sie Ihre Frage bitte, damit ich sie besser beantworten kann. (oder wenn Sie denken, dass eine andere Antwort besser ist, markieren Sie diese bitte als akzeptiert)

    – 3ozän

    11. Mai 2018 um 18:07 Uhr

Regex fur die Validierung australischer Telefonnummern
SydMK

Ich habe die Antwort von @3ocene positiv bewertet. Aber später gefunden passte nicht ganz zu meinem Fall.

Hier ist mein Testfall (nicht vollständig):

+(61) 455 562 400
+61-455-562-400
+61 455 562 400
+(61)-455-562-400
+(61) 455 562 400
(02) 4371 3164
(02) 4371-3164
02 80268989
03 80268989
04 80268989
05 80268989
433245898
433 245 898
433-245-898
4555-62400
123456
08 54 587 456

123456 ist negativ..

Dies ist, was ich gebaut habe, also hilft es jemandem hier, es ist:

^(\+?\(61\)|\(\+?61\)|\+?61|\(0[1-9]\)|0[1-9])?( ?-?[0-9]){7,9}$

Hier ist der Regexer-Link:

https://regex101.com/r/eiufOH/2

Ich würde zuerst alle Leerzeichen aus der Telefonnummer entfernen, da mehr Muster komplexere Regex bedeuten, und dann Folgendes anwenden:

(?:\+?61)?(?:\(0\)[23478]|\(?0?[23478]\)?)\d{8}

Soweit ich das beurteilen kann, funktioniert es.

Werde in Kürze eine Erklärung schreiben

Versuche dies

\b([\+-]?\d{2}|\d{4})\s*\(?\d+\)?\s*(?:\d+\s*)+\b

Regex fur die Validierung australischer Telefonnummern
AndreasC

Modifiziertes 3ozän, um 13, 180, 19, 1300, 1800, 1900 einzuschließen

13 xxxx und 1300 xxx xxx – „Ortstarif“-Anrufe, außer für Benutzer von VoIP und Mobiltelefonen

180 xxxx und 1800 xxx xxx – FreeCall

19 xxxx und 19xx xxxx – Premium-SMS

^(?=.*)((?:\+61) ?(?:\((?=.*\)))?([2-47-8])\)?|(?:\((?=.*\)))?([0-1][2-47-8])\)?) ?-?(?=.*)((\d{1} ?-?\d{3}$)|(00 ?-?\d{4} ?-?\d{4}$)|( ?-?\d{4} ?-?\d{4}$)|(\d{2} ?-?\d{3} ?-?\d{3}$))

https://regex101.com/r/dqsaHM/3

Habe auch diesen Link gefunden, der helfen kann, Regex mit einem Flussdiagramm zu bearbeiten, hoffe es hilft

https://ihateregex.io/expr/phone/

997320cookie-checkRegex für die Validierung australischer Telefonnummern

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy