我有这个PHP正则表达式代码:
$input = $_POST['name_field'];
if (!preg_match("/^[\pL0-9_.,!\"' ]+$/", $input)) {
echo 'error';
}
但是,如果$input
包含á
,é
等字符,则表示错误(即回显error
)。
我做错了什么?
答案 0 :(得分:0)
正如Casimir et Hippolyte评论和PHP documentation confirms,您需要使用u
模式修饰符来支持UTF-8字符:
此修饰符打开PCRE的其他功能 与Perl不兼容。模式和主题字符串被视为 UTF-8。
对代码的修改表明u
模式修饰符可以按您的方式工作:
<?php
// NOTE: array of sample input strings to demonstrate
$inputs = array(
'my_fiancée', // match expected
'über', // match expected
'my_bloody_valentine', // match expected
'"ABC, Easy as 123!"', // match expected
'whocares@whocares.com', // match NOT expected
"'foo'", // match expected
'bar?'); // match NOT expected
foreach($inputs as $input) {
if (!preg_match("/^[\pL0-9_.,!\"' ]+$/u", $input)) {
// ^
echo "\"$input\" => error\r\n"; // FORNOW: to explicitly note non-matches
//echo 'error';
} else { // FORNOW: else to explicitly indicate matches
echo "\"$input\" => all good\r\n";
}
}
?>
输出以下内容:
"my_fiancée" => all good
"über" => all good
"my_bloody_valentine" => all good
""ABC, Easy as 123!"" => all good
"whocares@whocares.com" => error
"'foo'" => all good
"bar?" => error