JavaScript 验证 API

什么是验证 API

HTML5 为表单元素提供了"约束验证 API"(Constraint Validation API):不必手写大量 if 判断,就能调用 checkValidity()、访问 validity 对象,自动检查 required、pattern、min/max 等约束是否满足。

HTML5 内置约束属性

先在 HTML 上声明约束,浏览器就"知道"规则了:

<input type="email" id="mail" required>
<input type="number" id="age" min="1" max="120" required>
<input type="text" id="code" pattern="[0-9]{6}" required>

checkValidity() 检查是否合法

调用元素或表单的 checkValidity(),全部满足返回 true,否则返回 false 并自动弹出浏览器的默认提示:

var age = document.getElementById("age");
console.log(age.checkValidity()); // 输入 150 时输出:false(超出 max)
var form = document.getElementById("myForm");
if (!form.checkValidity()) {
    console.log("表单尚有内容不合法");
}

validity 对象属性详解

访问 validity 能得知具体"不满足哪一条",常用属性见下表:

属性含义触发条件
valueMissing值为空必填项 required 没填
typeMismatch类型不匹配type="email" 却填了非邮箱
tooShort / tooLong太短 / 太长长度超出 minlength / maxlength
rangeUnderflow / rangeOverflow太小 / 太大数字超出 min / max
patternMismatch格式不匹配不满足 pattern 正则
valid是否全部通过以上都不成立时为 true

用 validity 给出自定义提示

利用 validity 对象可以写出具体的错误文案:

var code = document.getElementById("code");
if (!code.checkValidity()) {
    if (code.validity.valueMissing) {
        console.log("验证码不能为空");
    } else if (code.validity.patternMismatch) {
        console.log("验证码须为 6 位数字");
    }
}
// 输入 "abc" 时输出:验证码须为 6 位数字

setCustomValidity() 自定义错误

内置规则满足不了需求时,可以用它设置自定义的"非法"理由:

var pwd = document.getElementById("pwd");
if (pwd.value === pwd.value.toLowerCase()) {
    pwd.setCustomValidity("密码必须包含大写字母");
} else {
    pwd.setCustomValidity(""); // 合法时清空自定义错误
}
console.log(pwd.checkValidity()); // 全小写时输出:false

注意:设置自定义提示后该元素就处于"不合法"状态,记得在条件满足时重新设回空字符串。

小结

验证 API 用"声明式约束 + checkValidity()/validity"把常见校验标准化;需要额外规则时用 setCustomValidity() 扩展,代码比手写一长串 if 判断更简洁、更可靠。

笔记加载中…