php正则特殊字符emoji表情

盖翰池
2023-12-01
/**
 * 过滤掉含韩语、日语等非汉字、纯英文、纯数字
 * 汉字加数字、英文 ok
 * 可能有特殊字符
 * */

$str = " love,poem";
//$str = " 日音•推荐";
//$str = "李易峰情人节在家烤全羊 ";

//$str=" 早安,厦门";
//$str=" 你能做什么?献血,现在献血,经常献血";
//$str=" 新疆,亚克西!";
//$str = "EXID(이엑스아이디)";
//$str = "GFriend(여자친구)";
//$str = "Surface Pro (2017)";
//$str = "首尔 (서울)";
//$str = "首尔 (서울)北京 英文(中文(!,";
//$str = "Php中文";

var_dump(filterTitle($str));


function filterTitle($title) {
    $title = trim($title);
    $str = filterEmoji($title);
    $specialChar = " ::()()%%/\\|、-_—+!!·•??,,。.“”‘’\"'&《》<>「」…";
    $regSpecialChar = "/[" . preg_quote($specialChar, "/") . "]+/u";
    $strReplace = preg_replace($regSpecialChar, "", $str);
    //纯英文 纯数字
    $reg = "/^[a-z0-9\s]+$/iu";
    preg_match($reg, $strReplace, $match);
    if ($match) {
        return false;
    }
    /**
     * 三种空格unicode(\u00A0,\u0020,\u3000)表示的区别
     * 1.不间断空格\u00A0,主要用在office中,让一个单词在结尾处不会换行显示,快捷键ctrl+shift+space ,trim去不掉
     * 2.半角空格(英文符号)\u0020,代码中常用的;
     * 3.全角空格(中文符号)\u3000,中文文章中使用;
     */
    $chineseCharReg = "/[\x{4e00}-\x{9fa5}0-9a-z\x{00a0}]+/iu";
    $strReplace = preg_replace($chineseCharReg, "", $strReplace);
    if ($strReplace) {
        return false;
    }
    return true;
}

// 过滤掉emoji表情
function filterEmoji($str) {
    $str = preg_replace_callback("/./u",
        function (array $match) {
            return strlen($match[0]) >= 4 ? '' : $match[0];
        },
        $str);
    return $str;
}

 类似资料: