Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.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-regex允许unicode字符_Php_Regex - Fatal编程技术网

PHP-regex允许unicode字符

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:]_<>=@#$£€!?:;%,.\\'\\\"()

我使用以下带有preg_replace的正则表达式来过滤输入:

/[^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}]/

不过,这将几乎不匹配任何内容,因为它允许使用几乎所有的字符-
^
在正则表达式字符类的开头(介于
[
]
之间的内容)意味着“不在该类中的所有内容都将被匹配”

除此之外,您的正则表达式将只匹配长度为正好一个的输入-如果您想匹配所有内容,您应该在结束
]
后开始添加
+
,以保持匹配字符,直到模式失败


那么,出于这个原因,你到底想要实现什么?如果我们知道您想要做什么,也许我们可以建议您进行更多的正则表达式改进。

您能分享您的输入字符串和预期输出吗?