关于确认密码校验与仅字母输入校验的代码正确性及运行异常求助
代码问题汇总
validation 函数问题
- 逻辑冲突:函数定义时声明了
password、confirmpassword两个入参,但函数内部又从表单重新取值覆盖了入参,传参逻辑完全失效 - 取值错误:内部已经把
password、confirmpassword赋值为表单输入的字符串值,后续判断又错误调用了.value属性,字符串不存在该属性,对比永远不成立 - 分支错误:密码不一致的判断未包裹花括号,导致
return false语句无论判断结果如何都会执行,只要走到该逻辑段永远返回false - 笔误:原提示语中"more thank"为拼写错误,应为"more than"
allLetter 函数问题
- 无返回值:校验不通过时没有返回false,绑定在表单事件上时无法拦截提交操作
- 正则漏洞:当前正则
/^[a-z]*$/i允许空字符串通过,若为必填字段会出现校验失效问题
修正后代码
// 密码一致性&长度校验 function validation() { // 若实际场景是通过参数传入密码值,可删除下面两行取值逻辑,直接使用入参 const password = document.form.password.value; const confirmpassword = document.form.confirmpassword.value; if (password.length <= 6) { alert("密码长度需大于6位"); return false; } if (password !== confirmpassword) { alert("两次输入的密码不一致"); return false; } return true; } // 仅允许字母输入校验 function allLetter(inputtxt) { // 正则改为+,确保至少输入1位字母 const letters = /^[a-z]+$/i; if (!inputtxt.value.match(letters)) { alert("请仅输入字母"); return false; } return true; }
使用注意
如果绑定到表单提交事件,需要按onsubmit="return validation()"格式书写,否则返回的false不会拦截表单提交。
内容的提问来源于stack exchange,提问作者Ken Dantos
相关产品推荐
相关产品推荐

