关于php:字母数字preg_replace忽略单字符

Alpha numeric preg_replace ignoring unichars

我正在尝试使用preg_replace替换除chars nums和unicode chars之外的所有内容。
这是我尝试过并得到的错误:

preg_replace(): Compilation failed: range out of order in character class at offset 22

这是我的正则表达式:

[^A-Za-z0-9 \\x{0080}-\\x{FFFF}]

我想将文本转换为以下示例:

CAF?‰? CREATORS WERE HERE!#1 => CAF?‰ CREATORS WERE HERE1

-编辑-

我尝试了以下解决方案,并收到此错误:

1
2
3
4
5
6
$str = 'CAF?‰? CREATORS WERE HERE!#1';


$alphaNumStr = preg_replace('/[^A-Za-z0-9 x{0080}-x{FFFF}]/u', '', $str);

echo 'TEXT: ' . $alphaNumStr;

TEXT: preg_replace(): Compilation failed: range out of order in character class at offset 20 on line 4


如果要保留所有语言的所有字母,请使用:

1
2
$str = 'CAF?‰? CREATORS WERE HERE!#1';
echo preg_replace('/[^\\p{L}\\d\\s]+/u', '', $str);

输出:

1
CAF?‰ CREATORS WERE HERE1

\\p{L}代表任何字母。

进一步阅读


您需要将u(unicode)标志添加到您的正则表达式中:

1
2
$text = 'CAF?‰? CREATORS WERE HERE!#1';
echo preg_replace('/[^A-Za-z0-9 \\x{0080}-\\x{FFFF}]/u', '', $text);

输出

1
CAF?‰ CREATORS WERE HERE1

3v4l.org上的演示