1

我正在使用这个

$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);

我很感激任何帮助。

4

3 回答 3

1

范围\x00-\x1F包含\x0A.

你必须分割这个范围。

$string = preg_replace('/[\x00-\x09\x0B-\x1F\x7F\xA0]/u', '', $string);
于 2018-02-01T08:15:16.767 回答
1

试试这个

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

说明

x0A - 换行 (\n)

x0d - 回车 (\r)

示例

https://regexr.com/3k3bm

于 2018-02-01T08:20:25.573 回答
1

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

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

使用负前瞻来不匹配换行符和回车符。

于 2018-02-01T12:06:43.957 回答