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