从字符串中删除列入黑名单的术语,然后消除不必要的空格

Mua*_*idi 5 php replace sanitization blacklist

我有一系列列入黑名单的术语:

$arrayBlacklist = array("Kota","Kab.","Kota Administrasi","KAB", "KOTA", "Kabupaten");
Run Code Online (Sandbox Code Playgroud)

我有一个字符串要消毒:

$city = "Kota Jakarta Selatan";
// also: "Kab. Jakarta Selatan", "Kota Administrasi Jakarta Selatan", ...
Run Code Online (Sandbox Code Playgroud)

$arrayBlacklist如果它在$city变量中,我只想删除该值。

所以,我得到 $city = "Jakarta Selatan"

viv*_*_23 2

  • 根据字符串长度对数组进行排序,以避免使用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;
Run Code Online (Sandbox Code Playgroud)

更新:

preg_replace字符串匹配为左侧和右侧均被空格覆盖的字符串,因为有时在黑名单字符串中也有非单词字符。为了简化匹配,我们特意在循环开始之前添加前导和尾随空格。

注意:我们将匹配的字符串替换为preg_replace双空格,以避免与其他字符串递归匹配。