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;
};