问题描述
请考虑以下内容。
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单词,.
在字符类中失去了特殊含义。