2016-05-08 34 views
0

zu erlauben Ich muss überprüfen, ob eine Variable etwas anderes als 0-9 und das "-" und das "+" Zeichen und das "" (Raum).PHP preg_match, um nur Zahlen, Leerzeichen '+' und '-'

Das preg_match, das ich geschrieben habe, funktioniert nicht. Jede Hilfe wäre willkommen.

<?php 

$var="+91 9766554433"; 

if(preg_match('/[0-9 +\-]/i', $var)) 
echo $var; 
?> 
+1

Warum haben Sie entschieden, dass es nicht funktioniert? – RomanPerekhrest

Antwort

2

Sie haben ein * als quantifier auf die gesamte Zeichenklasse hinzufügen und anchors zu Beginn und am Ende der Regex hinzufügen: von von Anfang enthalten nichts anderes als die innere Regex ^ und $ bedeuten nur Linien entsprechen bis zum Ende der Zeile. Außerdem ist der Modifizierer i unnötig, da in dieser Regex keine Groß-/Kleinschreibung berücksichtigt werden muss.

Dies sollte die Arbeit tun.

if(!preg_match('/^[0-9 +-]*$/', $var)){ 
    //variable contains char not allowed 
}else{ 
    //variable only contains allowed chars 
} 
+2

Eigentlich muss man nicht '+' entkommen und als '-' ist der letzte Char in der Gruppe, man muss auch nicht entkommen. –

+0

Danke für den Hinweis. Es ist in einer Gruppe und wird daher nicht als Qualifikationsmerkmal interpretiert, denke ich. – cb0

+1

Beachten Sie, dass dies auch für leere Strings gilt (wegen des Sterns). Wenn Sie mindestens ** ein ** Zeichen benötigen, verwenden Sie '+'. – Jan

1

Sie können regex101.com versuchen Ihre regex testen Sie Ihre Kriterien und dann auf der linken Seite entsprechen, werden Sie Code-Generator finden, der Code für PHP, Python und Javascript generieren.

$re = "/^[\\d\\s\\+\\-]+$/i"; 
$str = "+91 9766554433"; 

preg_match($re, $str, $matches); 

Sie können einen Blick here.

2

negieren einfach die Zeichenklasse:

if (preg_match('/[^0-9 +-]/', $var)) 
    echo $var; 

oder fügen Sie Anker und quantifier:

if (preg_match('/^[0-9 +-]+$/', $var)) 
    echo $var; 

Die Groß- und Kleinschreibung Schlüssel nicht zwingend in Ihrem Fall ist.

0

Versuchen Sie, ob das funktioniert. Ich bin nicht dazu gekommen, es vorher zu testen, also entschuldige ich mich, wenn es nicht funktioniert.

if(!preg_match('/^[0-9]+.-.+." ".*$/', $var)){ 
    //variable contains char not allowed 
}else{ 
//variable only contains allowed chars 
}