Frage PHP reguläre Ausdrücke (Telefonnummer)


Ich habe Probleme mit einem regulären Ausdruck für Telefonnummern. Ich versuche eine Regex zu erstellen, die für europäische Telefonnummern so breit wie möglich ist. Die Telefonnummer kann mit einem + oder zwei führenden Nullen beginnen, gefolgt von einer Zahl zwischen 0 und 40. Dies ist jedoch nicht notwendig, daher kann dieser erste Teil auch ignoriert werden. Danach sollten es alle Zahlen sein, die in Paare von mindestens zwei, mit einem Leerzeichen oder einem - zwischen den Gruppen gruppiert werden.

Die Regex, die ich zusammengestellt habe, kann unten gefunden werden.

/((\+|00)+[0-4]+[0-9]+)?([ -]?[0-9]{2,15}){1,5}/

Dies sollte den folgenden Strukturen entsprechen

0031 34-56-78
0032123456789
0033 123 456 789
0034-123-456-789

+35 34-56-78
+36123456789
+37 123 456 789
+38-123-456-789
...

Was es auch nach meinem Javascript passt

+32 a54b 67-0:

Also muss ich irgendwo einen Fehler gemacht haben, aber ich kann es wirklich nicht sehen. Jede Hilfe wäre willkommen.


6
2017-10-24 12:02


Ursprung


Antworten:


Das Problem ist, dass Sie keine Anker verwenden ^ $ definiert den Anfang und das Ende der Zeichenfolge und findet daher eine Übereinstimmung an einer beliebigen Stelle in der Zeichenfolge.

/^((\+|00)+[0-4]+[0-9]+)?([ -]?[0-9]{2,15}){1,5}$/

Hinzufügen von Ankern wird den Trick machen. Mehr über diese Meta-Zeichen können gefunden werden Hier.


10
2017-10-24 12:06



Versuchen Sie das, vielleicht kann Ihnen helfen.

if (ereg("^((\([0-9]{3}\) ?)|([0-9]{3}-))?[0-9]{3}-[0-9]{4}$",$var)) 
{
    $valid = true; 
}

1
2017-10-24 12:13



Stellen ^ am Anfang der RegExp und $ schlussendlich.


1
2017-10-24 12:06