在PHP 7.4*中,使用preg_replace保留空格,拉丁和西里尔字母的正确方法是什么?

问题描述

请考虑以下内容。

var num = [30,1,90,3,2,34];
var bilnum = num.length,i,j,min;
var temp = 0;

for(i = 0; i < bilnum - 1; i++){
    min = i;
    for(j = i + 1; j < bilnum ; j++){
        if(num[j] < num[min]){
        min = j;
        }
        
    }
    if(min != i){
        temp = num[i];
        num[i] = num[min];
        num[min] = temp;
    }
}  

console.log(num);

预期的输出是(在phpfiddle.org和repl.it上都可以看到):

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

但是,带有PHP 7.4.8的Xampp和this site返回以下内容(每个PHP 7.4。*中都包含后者):

intro__text Mary had a little lamb well be right back 123456789 абвгдђежзијкл . šđ

如果删除aMaryhadalittlelambwellberightback123456789абнллклл.šđ ,则保留空格。在\p{Latin}\p{Cyrillic}中同时包含单个空格和特定字母的正确方法是什么?

解决方法

您可以使用\p{L}代替Unicode属性,而Unicode属性的支持在这里似乎已经中断。

您可以使用

preg_replace('/[^0-9\\p{L}\\s._+-]+/u','',$text)

还请注意,在字符类末尾使用-较为安全,以免转义。 ._都不需要转义,_是char单词,.在字符类中失去了特殊含义。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...