使用正则表达式校验用户输入是否包含管理员输入内容的问题咨询
问题根因
- 你当前定义的读取DOM元素、生成正则、计算匹配结果的代码都在全局作用域下,只会在页面首次加载时执行一次。此时两个输入框都为空值,生成的正则为空白正则,空白正则匹配任意字符串都会返回真,所以永远判断为correct
- 点击按钮触发校验函数时,读取的是页面加载时计算好的旧匹配结果,不会读取用户最新输入的内容,自然无法正确判断
修复代码
将变量读取、正则生成、匹配计算的逻辑都移入校验函数内部,每次点击都会重新获取最新输入值计算:
function sample() { // 每次点击都读取最新的输入值 const userInput = document.getElementById('user').value; const adminRule = document.getElementById('admin').value; // 管理员未输入校验规则时的提示,可根据需求调整 if (!adminRule.trim()) { document.getElementById('checker').innerHTML = "请先输入管理员校验规则"; return; } // 可选:如果不需要把管理员输入内容当做正则规则,只想做普通字符串包含匹配,建议先转义正则特殊字符 const escapedRule = adminRule.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); const reg = new RegExp(escapedRule, "i"); const result = userInput.match(reg); if (result) { document.getElementById('checker').innerHTML = "correct"; } else { document.getElementById('checker').innerHTML = "wrong"; } }
原有HTML代码无需修改可直接沿用。
补充说明:如果确实需要管理员输入正则规则进行匹配,可以删掉上面的正则转义逻辑,直接用
adminRule生成正则即可。
内容的提问来源于stack exchange,提问作者JustHush
相关产品推荐
相关产品推荐

