表单验证时如何实时监听输入并动态显示错误提示?
我正在做一个注册表单,想在用户输入时就实时验证邮箱格式,但不知道怎么把验证逻辑和DOM更新结合起来。试过用input事件监听,但错误信息总是显示不对。
比如下面这段代码,输入非法邮箱时没反应,控制台也没报错,是我哪里漏了吗?
const emailInput = document.getElementById('email');
const errorEl = document.getElementById('email-error');
emailInput.addEventListener('input', () => {
const isValid = /S+@S+.S+/.test(emailInput.value);
if (!isValid) {
errorEl.textContent = '请输入有效的邮箱地址';
errorEl.style.display = 'block';
} else {
errorEl.style.display = 'none';
}
});
/S+@S+.S+/这个写法根本没匹配字母或数字,S是大写的,它只匹配字符 'S' 本身,不是匹配“非空白字符”。你应该用小写
s的反面,也就是S(注意是反斜杠),或者干脆用更稳妥的邮箱正则。另外,建议加上trim()去掉首尾空格,避免用户输个空格就被判无效。修改后的代码这样写:
如果你还希望在用户输完离开输入框时再做一次最终校验(比如提交前),可以再加个
blur事件,不过实时验证的话,input就够用了。希望能帮到你,我之前也踩过这个正则的坑,大写 S 的时候自己都没发现……