我有以下用于验证名字,姓氏的PHP代码
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";
}
问题是我期望在$ m [0]找到非匹配元素,所以回显像
这样的消息echo "{$m[0]} is not allow character(s)";
但是$ m变量是一个空数组
任何帮助表示赞赏 谢谢
答案 0 :(得分:1)
您无法使用单个正则表达式执行此操作,因为匹配失败后不会存储不匹配的字符。
比赛失败后你可以使用一种倒置的模式,比如
$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";
}
请参阅PHP demo。输出:
array(2) {
[0]=>
string(1) "&"
[1]=>
string(1) "!"
}
validation failed
[^A-Za-z\p{Greek}\s]
模式是negated character class匹配除了类中定义的字符之外的任何字符:ASCII和希腊字母和空格。