如何删除字符串中的所有不可打印字符并保留一些?

时间:2018-02-01 08:11:20

标签: php regex preg-replace special-characters non-printing-characters

我正在使用此

$string = preg_replace('/[\x00-\x1F\x7F\xA0]/u', '', $string);

该正则表达式来自此链接PHP: How to remove all non printable characters in a string?

正则表达式正在移除\n,但我想保留它。 我该怎么办?

我认为\n000A,所以我尝试过这样的事情(这将使所有正则表达式停止工作) $string = preg_replace('/[\x00-\x1F\x7F\xA0[ˆ\x0A]]/u', '', $string);

我感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

范围\x00-\x1F包含\x0A

您必须拆分此范围。

$string = preg_replace('/[\x00-\x09\x0B-\x1F\x7F\xA0]/u', '', $string);

答案 1 :(得分:1)

对原始正则表达式的最小更改:

/(?!\n|\r)[\x00-\x1F\x7F-\xFF]/u

使用否定前瞻与换行和回车不匹配。

答案 2 :(得分:0)

试试这个

[\x00-\x1F\x7F\xA0[^\x0A^\x0d]]

<强>解释

x0A - 换行(\ n)

x0d - 回车(\ r)

示例

https://regexr.com/3k3bm