Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 正则表达式接受不应使用的字符';T_Php_Regex - Fatal编程技术网

Php 正则表达式接受不应使用的字符';T

Php 正则表达式接受不应使用的字符';T,php,regex,Php,Regex,我有以下正则表达式: /^[A-Za-z0-9-_ãÃñÑéÉêÊúÚíÍáÁõÕàÀèÈìÌòÒùÙçü.#()+=%$&?¿@!\s]+$/ 出于某种原因,“é”字符让“)”字符通过。 怎么了?UTF-8字符是多字节的。该表达式对字符进行了字面解释,在本例中,“é”等于“Ô)。要获得准确的解释,请使用“(*UTF8)”: 我在这里找到了答案:UTF-8字符是多字节的。该表达式对字符进行了字面解释,在本例中,“é”等于“Ô)。要获得准确的解释,请使用“(*UTF8)”: 我在这里

我有以下正则表达式:

/^[A-Za-z0-9-_ãÃñÑéÉêÊúÚíÍáÁõÕàÀèÈìÌòÒùÙçü.#()+=%$&?¿@!\s]+$/
出于某种原因,“é”字符让“)”字符通过。
怎么了?

UTF-8字符是多字节的。该表达式对字符进行了字面解释,在本例中,“é”等于“Ô)。要获得准确的解释,请使用“(*UTF8)”:


我在这里找到了答案:

UTF-8字符是多字节的。该表达式对字符进行了字面解释,在本例中,“é”等于“Ô)。要获得准确的解释,请使用“(*UTF8)”:


我在这里找到了答案:

您可以更简单地将
u
pattern修饰符添加到模式的末尾,效果相同。此外,我建议您使用表示任何字母、数字或下划线的
\w
压缩模式。相当于[a-zA-Z0-9]_

建议的模式:

代码:()

输出:(第一个模式不会在
上失败,正如预期的那样,第二个模式会失败。)


您可以更简单地将
u
pattern修改器添加到模式末尾,效果相同。此外,我建议您使用表示任何字母、数字或下划线的
\w
压缩模式。相当于[a-zA-Z0-9]_

建议的模式:

代码:()

输出:(第一个模式不会在
上失败,正如预期的那样,第二个模式会失败。)


你的代码保存在哪个字符集?我在使用UTF-8你的代码保存在哪个字符集?我在使用UTF-8很好的建议。非常感谢。很好的建议。非常感谢。
/(*UTF8)^[A-Za-z0-9-_ãÃñÑéÉêÊúÚíÍáÁõÕàÀèÈìÌòÒùÙçü.#()+=%$&?¿@!\s]+$/
$in = "AZ a-z\t0-9-_ãÃñÑéÉêÊúÚíÍáÁõÕàÀèÈìÌòÒùÙçü\r\n.#()+=%$&?¿@!©";  // string contains ©
echo preg_match('~^[A-Za-z0-9-_ãÃñÑéÉêÊúÚíÍáÁõÕàÀèÈìÌòÒùÙçü.#()+=%$&?¿@!\s]+$~', $in, $out) ? $out[0] : 'fail';

echo "\n\nNow with a unicode flag...\n";
echo preg_match('~^[-\wãÃñÑéÉêÊúÚíÍáÁõÕàÀèÈìÌòÒùÙçü.#()+=%$&?¿@!\s]+$~u', $in, $out) ? $out[0] : 'fail';
//  this is shorter--^^                            here is the magic--^
AZ a-z  0-9-_ãÃñÑéÉêÊúÚíÍáÁõÕàÀèÈìÌòÒùÙçü
.#()+=%$&?¿@!©

Now with a unicode flag...
fail