2017-10-03 3 views
2

i passend haben folgende PHP-Code für validate Vorname, NachnamePHP preg_match scheitern, nicht zurückzukehren

if (preg_match("/^[A-Za-z\p{Greek}\s]+$/u", "Hello & World!", $m)) 
{ 
    //validation pass 
    echo "validation pass"; 
} 
else 
{ 
    //validation failed 
    var_dump($m); 
    echo "validation failed"; 
} 

Das Problem ist, dass ich auf $ m erwartete [0], die nicht passenden Elemente zu finden, so echo eine Meldung wie

echo "{$m[0]} is not allow character(s)"; 

aber die $ m Variable ein leeres Array ist

Jede Hilfe Dank

geschätzt
+1

Sie können dies nicht mit einer einzelnen Regex tun, da die nicht übereinstimmenden Zeichen nicht gespeichert werden, nachdem eine Übereinstimmung fehlgeschlagen ist. –

Antwort

1

Sie können das nicht mit einer einzelnen Regex, da die nicht übereinstimmenden Zeichen nicht gespeichert werden, nachdem eine Übereinstimmung fehlgeschlagen ist.

Sie können eine Art eines umgekehrten Muster verwenden, nachdem ein Spiel versagt, wie

$s = "Hello & World!"; 
if (preg_match("/^[A-Za-z\p{Greek}\s]+$/u", $s)) { 
    echo "validation pass"; //validation pass 
} 
else { 
    if (preg_match_all('~[^A-Za-z\p{Greek}\s]~u', $s, $m)) { //validation failed 
     var_dump($m[0]); 
    } 
    echo "validation failed"; 
} 

die PHP demo See. Output:

array(2) { 
    [0]=> 
    string(1) "&" 
    [1]=> 
    string(1) "!" 
} 
validation failed 

[^A-Za-z\p{Greek}\s] Das Muster ist ein negated character class jede char anderen als dem passenden (s), definiert in der Klasse: ASCII und griechische Buchstaben und Leerzeichen.

+0

Danke, dass du meinen Tag gerettet hast – ntan