Ich versuche, Unicode-Leerzeichen wie dieses Zeichen zu kürzen, und das ist mir mit dieser Lösung gelungen. Das Problem bei dieser Lösung besteht darin, dass Unicode-Leerzeichen zwischen normalen Zeichen nicht entfernt werden. Hier wird zum Beispiel Thin Space verwendet
$string = " test string "; echo preg_replace('/^[pZpC]+|[pZpC]+$/u', '', $string); // outputs: test string
Ich kenne mich ein wenig mit regulären Ausdrücken aus, daher weiß ich nicht, was ich an meinem Ausdruck ändern soll, um dieses Problem zu lösen
要删除字符串开头和结尾处的所有带有控制字符的 Unicode 空白,以及删除字符串内任何位置除常规空格之外的所有带有控制字符的 Unicode 空白,您可以使用
请参阅正则表达式演示 #1和正则表达式演示 #2。
详细信息
^[\pZ\pC]+
- 字符串开头的一个或多个空格或控制字符|
- 或[\pZ\pC]+$
- 字符串末尾的一个或多个空格或控制字符|
- 或(?! )[\pZ\pC]
- 字符串内任意位置除常规空格之外的一个或多个空格或控制字符[^\S ]
- 除常规空格 (\x20
) 之外的任何空格如果您还需要“排除”常见换行符,请将
(?! )[\pZ\pC]
替换为(?![ \r\n])[ \pZ\pC]
(由 @MonkeyZeus 建议) ,在第二个正则表达式中,这意味着您需要使用[^\S \r\n]
。查看 PHP 演示:
这样的 Unicode 空格 \u{2009} 如何在不同的地方引起问题。 因此,我会将所有 unicode 空格替换为常规空格,然后应用 trim()。
注意:注释中字符串的表示是用 debug::writeUni($string, $trimString); 来表示的。从此类实现。