PHP-regex允许unicode字符
我使用以下带有preg_replace的正则表达式来过滤输入:PHP-regex允许unicode字符,php,regex,Php,Regex,我使用以下带有preg_replace的正则表达式来过滤输入: /[^A-Za-z0-9[:space:][:blank:]_<>=@#£€$!?:;%,.\\'\\\"()&+\\/-]/ /[^A-Za-z0-9[:空格:][:blank:][u=@$!?:;%,.\\\\\”()&+\/-]/ 但是,这不允许像umlauts这样的重音字符,因此我将其更改为: /[^\w[:space:][:blank:]_<>=@#$£€!?:;%,.\\'\\\"()
/[^A-Za-z0-9[:space:][:blank:]_<>=@#£€$!?:;%,.\\'\\\"()&+\\/-]/
/[^A-Za-z0-9[:空格:][:blank:][u=@$!?:;%,.\\\\\”()&+\/-]/
但是,这不允许像umlauts这样的重音字符,因此我将其更改为:
/[^\w[:space:][:blank:]_<>=@#$£€!?:;%,.\\'\\\"()&+\\/-]/u
/[^\w[:space:[:blank:][-],.\\'\\\\'\“()&+\\/-]/u
不过,这确实适用于$或欧元字符,不会返回任何内容,但我需要接受这些字符,我已尝试转义它们,但这不起作用
我还想创建一个类似于A-Za-z的正则表达式,但它允许重音字符,我该怎么做呢
u(PCRE\u UTF8)此修改器打开PCRE的附加功能
这与Perl不兼容。模式和主题字符串是
作为UTF-8处理。无效的主题将导致preg_*函数
不匹配;无效模式将触发级别错误
警告。五个和六个八位组UTF-8序列被视为无效
自PHP 5.3.4(分别为PCRE 7.3 2007-08-28)以来;以前是
视为有效的UTF-8
这意味着首先必须确保输入字符串是正确的UTF-8文本
第二,你听说过unicode分类吗?如果没有,请转到并搜索Unicode类别。例如,您可以使用\p{S}
匹配所有货币符号,或使用\p{L}
匹配所有字母。您的正则表达式(可能)可以这样编写:/[^\p{L}\p{p}\p{N}\p{S}\p{M}]/
不过,这将几乎不匹配任何内容,因为它允许使用几乎所有的字符-^
在正则表达式字符类的开头(介于[
和]
之间的内容)意味着“不在该类中的所有内容都将被匹配”
除此之外,您的正则表达式将只匹配长度为正好一个的输入-如果您想匹配所有内容,您应该在结束]
后开始添加+
,以保持匹配字符,直到模式失败
那么,出于这个原因,你到底想要实现什么?如果我们知道您想要做什么,也许我们可以建议您进行更多的正则表达式改进。您能分享您的输入字符串和预期输出吗?