2016-07-01 7 views
1

Ich brauche eine Zeichenfolge, die aus einigen Zahlen, Komma, Unterstrich, Schrägstrich, Bindestrich und Leerzeichen besteht.PHP Regulärer Ausdruck für Zahl, Komma, Unterstrich, Schrägstrich, Bindestrich und Leerzeichen

Ich bin fast in Ordnung. Hier ist mein Code soweit.

$regex = '#^[0-9-_,/\s]+$#'; 
if(preg_match($regex, $string)){ 
    return true; 
} else { 
    return false; 
} 

Aber ich will mindestens 4 Ziffer innerhalb von 0 bis 9.

zum Beispiel enthalten, Dies sind die Werte, die ich auf gültige wollen:

09-12345678 
123, 456, 789 
12/ 34/ 56 

Diese Werte sind I will nicht gültig:

1,2 
3/5/6 
7-8-9 

Also habe ich so versucht.

$regex = '#^[0-9-_,/\s]{4,100}$#'; 

Und

$regex = '#^[0-9{4,100}-_,/\s]+$#'; 

Aber auch sie sind nicht wahr. Wie kann ich tun?

+1

'^ Ende (= (?:?. * \ D) {4}) [0-9 -_,/\ s] + $ ' – revo

+1

Sind Sie sicher über meine Regex? @ Jan – revo

Antwort

1

können Sie eine Look-Ahead-basierte regex verwenden:

~^(?=(?:\D*\d){4})[-0-9_,/\s]+$~ 

RegEx Demo

  • (?=(?:\D*\d){4}) Look-Ahead ist das Vorhandensein von mindestens 4 Stellen in der Eingabe zu behaupten.
  • Auch ist wichtig, Bindestrich am Anfang zu halten oder in Zeichenklasse [...]
+0

danke @anubhava. Ist der Kommentar von revo auch wahr? –

+0

Für OP: Revo's Kommentar hat '-' in der Mitte, was nicht korrekt ist. Und 'D *' ist effizienter als '. *'. @Jan '\ w' passt auch' [a-zA-Z] ', was nicht in der Charakterklasse von OP enthalten war. – anubhava

+1

Obwohl ich diesen Satz aus Frage kopiert habe, macht ein '-' in der Mitte eines Zeichensatzes kein Problem, wenn unmittelbar ein anderer gültiger Bereich vorangeht. So funktioniert es (OP bestätigt bereits). Aber ich bin mir sicher, '' D * 'ist viel effizienter und ich akzeptiere diesen Teil. – revo

Verwandte Themen