Regulärer Ausdruck

messmar

Erfahrenes Mitglied
guten Morgen,

ich habe den folgenden regulären Ausdruck erhalten, um ihn für die Überprüfung eins Tel-Nummer Felds zu verwenden.

Ich weiße es aber leider nicht, was dadurch geprüft werden muss, außer der Eingabe von Zahlen. (In dem Fall hätte ich es einfach mit der Methode
HTML:
NaN()
erledigt)

Ich nehme Mal an, dass ein Leer Zeichen zwischen bestimmten Nummern sein muss, aber
ich mir nicht ganz sicher.

Kann jemand mir bitte helfen und sagen, was da genau geprüft werden muss.

Danke und Gruß
Messmar

Regulärer Ausdruck:
HTML:
/(?:^[\W]{3,})|(?:^0{3,})|(?:^1{3,})|(?:^2{3,})|(?:^3{3,})|(?:^4{3,})|(?:^5{3,})|(?:^6{3,})|(?:^7{3,})|(?:^8{3,})|(?:^9{3,})|([^\d\s\W])/is
 
Also erstmal lässt sich feststellen: Dieser reguläre Ausdruck kann sehr stark vereinfacht werden. Fangen wir mal an:
Code:
(?:^0{3,})|(?:^1{3,})|(?:^2{3,})|(?:^3{3,})|(?:^4{3,})|(?:^5{3,})|(?:^6{3,})|(?:^7{3,})|(?:^8{3,})|(?:^9{3,})
Dieser Teil heißt, dass entweder die Null, oder die Eins oder die Zwei oder die Drei oder oder oder bis Neun am Anfang drei mal vorkommen muss. Also es muss z.B. "111" oder "222" oder "333" oder "444" etc. am Anfang stehen, wobei auch mehr zugelassen ist wie z.B. "555555555555".

Wenn du's genau wissen willst:

Das "^" sagt dir, was danach kommt muss am Anfang des Teststrings stehen. Die Klammern sind einfach nur zur Gruppierung da.

Das "?:" kannst du höchstwahrscheinlich für deine Zwecke ignorieren - das heißt einfach nur, dass der Ausdruck in der Klammer nicht in einer evtl. Rückgabe (wenn man den Regulären Ausdruck auf einen Teststring angewendet hat und den gefunden String haben will) enthalten sein wird.

Die geschweiften Klammern "{3,}" sind eine Quantifizierung - was davor steht muss drei bis unendlich mal vorkommen. Würde dort stattdessen "{2,5}" stehen, müsste es mindestens zwei aber höchstens fünf mal vorkommen.

Also wenn man alle Ausdrücke, die oben fett gedruckt sind zusammen nimmt heißt das am Anfang des Teststrings muss ein und die selbe Zahl mindestens drei mal vorkommen, damit der reguläre Ausdruck passt. Es würde also auf 333, 555 aber auch 777777777777 passen. Das an sich lässt sich aber schon eleganter machen.

Soweit klar? Dann geht's weiter:

Der Ausdrück von oben wird durch "(?:^[\W]{3,})|" am Anfang deines Ausrucks ziemlich ad absurdum geführt. "(?:^[\W]{3,})|" heißt nämlich, dass am Anfang auch eine beliebige Kombination aus mindestens drei Zeichen, die keine Buchstaben sind stehen kann.
Dadurch werden die ganzen Klammern danach sinnlos, weil hier schon Fälle erlaubt werden wie "+49" oder "6 +8+ ++$§§.-" oder "777777" oder auch "333", "444", "999".

Der Ausdruck, den du gepostet hast past also nicht nur auf Telefonnummern. Ich würde ja sowas vorschlagen:
Code:
/^(\+|0{2})\d{2}\ ?\d{2}\ ?\d{3,}$/g
Der Ausdruck verlangt, dass am Anfang zwei Nullen oder ein Plus gefolgt von zwei Zahlen sein müssen - sprich die Ländervorwahl wie "0049" oder "+45". Danach kann bei diesem Ausdruck ein Leerzeichen kommen, muss aber nicht gefolgt von zwei Zahlen (die Ortsvorwahl z.B. "89" wie in "0049 89" für München, Deutschland). Danach wiederum kann ein erneutes Leerzeichen kommen, muss aber nicht und dann müssen mindestens drei Zahlen kommen - die eigentliche Nummer.
 
Zuletzt bearbeitet:
Hallo con-f-use,

vielen vielen Dank für die ausführliche Erklärung. so eine Antwort hatte ich echt nicht erwartet...Da habe ich wirklich was gelernt.

Besten Gruß
Messmar
 

Neue Beiträge

Zurück