[我知道,PHP PCRE函数将字符串视为字节序列,因此许多站点建议使用/u
修饰符将输入和正则表达式作为UTF-8处理。
但是,我真的总是需要吗?我的测试表明,当我不使用转义序列或点或类似符号时,此标志没有任何区别。
例如
[preg_match('/^[\da-f]{40}$/', $string);
检查字符串是否具有SHA1哈希格式]
preg_replace('/[^a-zA-Z0-9]/', $spacer, $string);
替换每个非ASCII字母或数字的字符
preg_replace('/^\+\((.*)\)$/', '\1', $string);
以获取+(XYZ)
的内部内容>
这些正则表达式仅包含单字节ASCII符号,因此无论输入哪种编码,它都应在every
输入上起作用,不是吗?请注意,第三个正则表达式使用点运算符,但是当我在字符串的开头和结尾切掉一些ASCII字符时,这也应该在UTF-8上起作用,对吗?没有人告诉我,如果我忽略了什么吗?
[我知道,PHP PCRE函数将字符串视为字节序列,因此许多站点建议使用/ u修饰符将输入和正则表达式作为UTF-8处理。但是,我真的总是需要吗?我的测试表明,...
第一个表达式没有问题。要量化的字符显式为单字节,不能以UTF-8多字节序列出现。
u(PCRE_UTF8)此修改器打开了与Perl不兼容的PCRE的其他功能。模式和主题字符串被视为UTF-8。无效的主题将导致preg_ *函数不匹配。无效的模式将触发E_WARNING级别的错误。自PHP 5.3.4起(分别为PCRE 7.3 2007-08-28),五个和六个八位字节的UTF-8序列被视为无效;以前那些被视为有效的UTF-8。