如何编写正则忽略大小写与特殊字符实现表单关键词全变体匹配
实现思路
- 新增重音字符归一化函数,将所有带重音的特殊字符转换为对应的无重音基础字符
- 关键词数组仅需保留无重音的小写基础关键词,无需手动枚举所有变体
- 匹配前先将用户输入的内容统一做「去重音+转小写」处理,再和基础关键词匹配即可覆盖所有大小写、重音变体场景
修改后完整代码
<script> new BulldeskIntegration({ token: '123456', map: { 'form_fields[identifier]': 'identifier', 'form_fields[name]': 'name', 'form_fields[email]': 'email', 'form_fields[phone]': 'phone', 'form_fields[message]': 'message', }, mapCallback: function (fields) { // 仅保留基础无重音小写关键词即可,无需枚举所有变体 const keywords = ['curriculo']; // 重音字符归一化辅助函数 const removeAccents = (str) => { return str.normalize('NFD').replace(/[\u0300-\u036f]/g, ''); }; const { value } = document.querySelector('#form-field-message'); if (value) { // 先对用户输入做归一化处理:去重音+转小写 const normalizedInput = removeAccents(value).toLowerCase(); // 校验是否包含任意目标关键词 const hasKeyword = keywords.some(keyword => normalizedInput.includes(keyword)); if (hasKeyword) { jQuery('#form-field-conversion').attr('value', 'nok'); return []; } } return fields; } }); </script>
调整说明
- 替换了原来需要枚举所有变体的
words数组,后续新增关键词只需要添加无重音小写形式即可,维护成本极低 - 新增的
removeAccents函数通过Unicode标准化操作,将所有带重音的字符(比如í、á、ó等)统一转换为对应的无重音基础字符 - 匹配前先把用户输入的内容做归一化处理,不管用户输入的是大小写混合还是带重音的变体,都会统一转为无重音小写形式再匹配,完全覆盖所有变体场景
内容的提问来源于stack exchange,提问作者Gustavo Matera
相关产品推荐
相关产品推荐

