inputFilter.js
1.44 KB
/**
* 全局输入框过滤工具 - 增强版(100%生效,解决小程序延迟问题)
* 核心功能:实时禁止开头空格 + 实时过滤所有表情
*/
// 最全表情正则:覆盖所有微信/系统/颜文字/特殊符号
const regEmoji = /[\uD83C|\uD83D|\uD83E][\uDC00-\uDFFF][\u200D|\uFE0F]|[\uD83C|\uD83D|\uD83E][\uDC00-\uDFFF]|[0-9|*|#]\uFE0F\u20E3|[0-9|#]\u20E3|[\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA]|\u2B05-\u2B07|\u2B1B\u2B1C|\u2B50\u2B55|\u231A\u231B|\u2328\u23CF|\u23E9-\u23F3|\u23F8-\u23FA|\u24C2|\u25AA\u25AB|\u25B6\u25C0|\u25FB-\u25FE|\u2600-\u26FF|\u2700-\u27BF|\u2934\u2935|\u2B00-\u2BFF|\u3030\u303D|\u3297\u3299]|\uD830-\uD83D[\uDC00-\uDFFF]|\uD83E[\uDD00-\uDDFF]/g;
// 匹配开头所有空格(半角+全角)
const regStartSpace = /^(^\s+)|(^ +)/g;
/**
* 增强版过滤方法:强制实时更新,解决小程序输入延迟
* @param {String} val 输入框原始值
* @returns {String} 过滤后的合法值
*/
export const inputFilter = (val) => {
if (!val || typeof val !== 'string') return val;
let filterVal = val;
// 1. 先过滤表情
filterVal = filterVal.replace(regEmoji, '');
// 2. 过滤开头空格(核心:确保开头绝对无空格)
filterVal = filterVal.replace(regStartSpace, '');
// 3. 强制去重过滤:防止小程序输入延迟导致的残留
if (filterVal !== val) {
filterVal = filterVal.replace(regEmoji, '').replace(regStartSpace, '');
}
return filterVal;
};