diff --git a/utils/util.js b/utils/util.js index e8b6268..ac85718 100644 --- a/utils/util.js +++ b/utils/util.js @@ -433,4 +433,46 @@ export function isJsonArrayString(str) { // 解析失败(普通字符串/非法 JSON)→ 返回 false return false; } +} + +/** + * 判断目标值是否包含指定字符串 + * @param {string|number|array} target - 目标值(字符串/数字/数组) + * @param {string} searchStr - 要查找的子字符串 + * @param {object} [options] - 可选配置 + * @param {boolean} [options.ignoreCase=false] - 是否忽略大小写 + * @param {boolean} [options.allowEmpty=false] - 当 searchStr 为空时,是否返回 true(默认 false) + * @returns {boolean} 是否包含指定字符串 + */ +export function includesString(target, searchStr, options = {}) { + // 解构配置,设置默认值 + const { + ignoreCase = false, allowEmpty = false + } = options; + + // 1. 处理 searchStr 为空的情况 + if (searchStr === '' || searchStr === null || searchStr === undefined) { + return allowEmpty; + } + + // 2. 统一将目标值转为字符串(兼容数字/数组等) + let targetStr = ''; + if (typeof target === 'string') { + targetStr = target; + } else if (typeof target === 'number') { + targetStr = String(target); + } else if (Array.isArray(target)) { + // 数组:拼接为字符串(也可改为 "数组中某一项包含",根据需求调整) + targetStr = target.join(','); + } else { + // 其他类型(对象/布尔等):转为字符串或返回 false + targetStr = String(target); + } + + // 3. 处理大小写忽略 + const processedTarget = ignoreCase ? targetStr.toLowerCase() : targetStr; + const processedSearch = ignoreCase ? searchStr.toLowerCase() : searchStr; + + // 4. 执行包含判断 + return processedTarget.includes(processedSearch); } \ No newline at end of file