允许外来字符

时间:2014-11-23 00:57:07

标签: php regex

我有这个PHP正则表达式代码:

$input = $_POST['name_field'];

if (!preg_match("/^[\pL0-9_.,!\"' ]+$/", $input)) {
    echo 'error';
}

但是,如果$input包含áé等字符,则表示错误(即回显error)。

我做错了什么?

1 个答案:

答案 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

您也可以check the adaptation of your code through Ideone