我有一系列列入黑名单的字词:
$arrayBlacklist = array("Kota","Kab.","Kota Administrasi","KAB", "KOTA", "Kabupaten");
我有一个字符串要 sanitizer :$city = "Kota Jakarta Selatan";
// also: "Kab. Jakarta Selatan", "Kota Administrasi Jakarta Selatan", ...
我只想删除$arrayBlacklist
变量中的$city
值。所以,我得到
$city = "Jakarta Selatan"
最佳答案
usort
出现重叠问题。 preg_replace
每个字符串不区分大小写。 str_replace
删除所有带有单个空格的双空格。 代码段:
<?php
$arrayBlacklist = array("Kota","Kab.","Kota Administrasi","KAB", "KOTA", "Kabupaten","Jakarta");
usort($arrayBlacklist,function($a,$b){
return strlen($b) <=> strlen($a);
});
$city = "Kota Jakarta Selatan kota Administrasi ki";
$city = " ". $city. " "; // add spaces to ease the matching
foreach($arrayBlacklist as $val){
$city = preg_replace('/\s'.$val.'\s/i',' ',$city); // replace with double spaces to avoid recursive matching
}
$city = str_replace(" "," ",trim($city));
echo $city;
更新:preg_replace
将字符串匹配为字符串,字符串左右两边都用空格覆盖,因为有时列入黑名单的字符串中也会包含非单词字符。为了简化匹配,我们故意在循环开始之前添加前导和尾随空格。注意:我们将
preg_replace
中的匹配字符串替换为双倍空格,以避免与其他字符串进行递归匹配。
关于php - 从字符串中删除列入黑名单的字词,然后消除不必要的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63014244/