ExtJS表单TextField提交值时如何在每个*前插入.符号
问题根因
当前实现的逻辑存在明显偏差,完全没有匹配“每个*前插入.符号”的需求:
- 代码仅做了固定的截取操作:检测到字符串含*时,直接切掉最后1位字符,末尾拼接
.*返回 - 全程没有定位字符串中开头、中间位置的符号做单独处理,所以输入
*test*时,代码会先把末尾的切掉得到*test,再拼接.*得到错误结果*test.*,完全遗漏了开头位置的*
正确实现方案
无需做复杂的字符串遍历、裁剪逻辑,直接通过全局正则替换就能覆盖所有场景:匹配字符串中每一个出现的*,将其替换为.*,等价于在每个*前插入.符号。
重写后的TextField组件核心配置如下:
{ fieldLabel: 'name', name: 'name', submitValue: true, enableKeyEvents: true, getSubmitValue: function () { const originValue = this.getValue() || ''; // 全局匹配所有*,替换为.*完成插入操作 return originValue.replace(/\*/g, '.*'); } }
实际效果校验
替换逻辑可覆盖所有测试场景:
- 输入
*test*:两处分别替换为.,最终提交值为.*test.*,符合预期 - 输入
*t*st*:三处*全部完成替换,最终提交值为.*t.*st.*,匹配要求 - 兼容连续*场景,比如输入
x**y,提交值为x.*.*y,不会出现特殊字符漏处理的问题
内容的提问来源于stack exchange,提问作者risky
相关产品推荐
相关产品推荐

