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

标签 php replace sanitization blacklist

我有一系列列入黑名单的字词:

$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/

    相关文章:

    php - 使用没有数据库包装器的 PHP 记录 mysql 查询

    python - 如何删除斜线后的空格 "/"

    javascript - 如何为数组中的每个元素绕过 SecurityTrustResourceUrl?

    php - 指定一组在单独进程中运行的 PHPUnit 测试

    php - Symfony Doctrine 事件订阅者未在调试 :event-dispatcher 中列出

    PHP PDO 计算数据库中所有表的行数

    c - 如何在 C 中对 'æ' 、 'ø' 和 'å' 进行操作

    python-3.x - 用组的现有值替换 NaN

    javascript - 如何通过覆盖 odoo.define 中的函数来禁用 Odoo JavaScript 清理

    php - MySQL真正的转义字符串