【发布时间】:2020-08-15 16:16:15
【问题描述】:
考虑以下内容。
function cleanText($text) {
return preg_replace("/[^0-9\p{Latin}\p{Cyrillic}\.\-\_\s+]+/u","",$text);
}
$tmp = "intro_|_text Mary had a little lamb, we'll be right back 123456789 абвгдђежзијкл ,./'* αβγδε šđ";
echo cleanText($tmp);
预期的输出是(在 phpfiddle.org 和 repl.it 上都可以看到):
intro__text Mary had a little lamb well be right back 123456789 абвгдђежзијкл . šđ
但是,带有 PHP 7.4.8 的 Xampp 和 this site 返回以下内容(后者带有每个 PHP 7.4.*):
aMaryhadalittlelambwellberightback123456789абнллклл.šđ
如果删除\p{Latin}\p{Cyrillic},则保留空格。在preg_replace 中同时包含单个空格和特定字母的正确方法是什么?
【问题讨论】:
-
由于某些原因,这些属性不受支持,您可以使用
\p{L}匹配任何字母,使用preg_replace('/[^0-9\\p{L}\\s._+-]+/u', '', $text) -
@WiktorStribiżew 使用
\p{L}时有什么注意事项吗?也就是说,是否有任何特殊情况可能会失败或出现意外行为? -
它只匹配任何字母。如果您不在乎它是亚美尼亚字母、西里尔字母还是希伯来字母,那么您可以使用它。
-
这似乎有效。谢谢。