JavaScript处理StreetAddress字段时replace替换功能不生效问题排查
故障原因
- 条件判断逻辑颠倒:当前
if (streetaddress.toLowerCase().indexOf("street") == -1)的含义是地址中不包含street字符串时才执行替换,和需求完全相反 - 字符串
replace方法特性:JS中字符串为不可变类型,replace不会修改原变量,只会返回替换后的新字符串,现有代码没有接收返回值,修改自然不会生效 - 替换匹配范围不全:现有写法只能匹配全小写的
street,无法处理用户输入的大小写混合、全大写的同类字符串
修复方案
将CheckEntries函数中最后一段替换逻辑修改为以下代码即可:
// 存在任意大小写形式的street时执行替换 if (streetaddress.toLowerCase().indexOf("street") !== -1) { // 正则加i修饰符不区分大小写匹配,替换结果赋值回原变量 streetaddress = streetaddress.replace(/street/gi, 'Street'); } return true;
修复后完整的CheckEntries函数代码如下:
function CheckEntries() { if (enteredname[0] == ' ') { alert("First position in name field can not be a space.") return false; } if (enteredname.indexOf(" ") == -1) { alert("no spaces found in entry.") return false; } if (enteredname.toLowerCase().indexOf("miller") == -1) { alert("miller is not in name field.") return false; } if (state.length != 2) { alert("State field must be only two characters long.") return false; } if (zip[0] != '4' || zip[1] != '5') { alert("Zip field must start with 45.") return false; } // 修复后的替换逻辑 if (streetaddress.toLowerCase().indexOf("street") !== -1) { streetaddress = streetaddress.replace(/street/gi, 'Street'); } return true; }
内容的提问来源于stack exchange,提问作者jeantaylor2021
相关产品推荐
相关产品推荐

