1.JavaScript 表单
1.1JavaScript 表单验证
html 表单验证可以通过 JavaScript 来完成
以下实例代码用于判断表单字段 (fname) 值是否存在, 如果存在, 则弹出信息, 否则阻止表单提交:
- function validateForm() {
- var x = document.forms["myForm"]["fname"].value;
- if (x == null || x == "") {
- alert("需要输入名字");
- return false;
- }
- }
以上 JavaScript 代码可以通过 HTML 代码来调用:
<form name="myForm" action="demo_form.php" onsubmit="return validateForm()" method="post">
名字: <input type="text" name="fname">
- <input type="submit" value="提交">
- </form>
1.2HTML 表单自动验证
HTML 表单验证也可以通过浏览器来自动完成
如果表单字段 (fname) 的值为空, required 属性会阻止表单提交:
- <form action="demo_form.php" method="post">
- <input type="text" name="fname" required="required">
- <input type="submit" value="提交">
- </form>
1.3 数据验证
数据验证用于确保用户输入的数据是有效的
典型的数据验证有:
必需字段是否有输入?
用户是否输入了合法的数据?
在数字字段是否输入了文本?
大多数情况下, 数据验证用于确保用户正确输入数据
数据验证可以使用不同方法来定义, 并通过多种方式来调用
服务端数据验证是在数据提交到服务器上后再验证
客户端数据验证 side validation 是在数据发送到服务器前, 在浏览器上完成验证
1.4HTML 约束验证
HTML5 新增了 HTML 表单的验证方式: 约束验证(constraint validation)
约束验证是表单被提交时浏览器用来实现验证的一种算法
HTML 约束验证基于:
HTML 输入属性
CSS 伪类选择器
DOM 属性和方法
约束验证 HTML 输入属性
属性 | 描述 |
---|---|
disabled | 规定输入的元素不可用 |
max | 规定输入元素的最大值 |
min | 规定输入元素的最小值 |
pattern | 规定输入元素值的模式 |
required | 规定输入元素字段是必需的 |
type | 规定输入元素的类型 |
约束验证 CSS 伪类选择器
选择器 | 描述 |
---|---|
:disabled | 选取属性为 "disabled" 属性的 input 元素 |
:invalid | 选取无效的 input 元素 |
:optional | 选择没有 "required" 属性的 input 元素 |
:required | 选择有 "required" 属性的 input 元素 |
:valid | 选取有效值的 input 元素 |
1.5E-mail 验证
意思就是说, 输入的数据必须包含 @ 符号和点号 (.) 同时,@ 不可以是邮件地址的首字符, 并且 @ 之后需有至少一个点号:
- function validateForm(){
- var x=document.forms["myForm"]["email"].value;
- var atpos=x.indexOf("@");
- var dotpos=x.lastIndexOf(".");
- if (atpos<1 || dotpos<atpos+2 || dotpos+2>=x.length){
- alert("不是一个有效的 e-mail 地址");
- return false;
- }
- }
- <form name="myForm" action="demo-form.php" onsubmit="return validateForm();" method="post">
- Email: <input type="text" name="email">
- <input type="submit" value="提交">
- </form>
2.JavaScript 验证 API
2.1 约束验证 DOM 方法
Property | Description |
---|---|
checkValidity() | 如果 input 元素中的数据是合法的返回 true,否则返回 false。 |
setCustomValidity() | 设置 input 元素的 validationMessage 属性,用于自定义错误提示信息的方法。 使用 setCustomValidity 设置了自定义提示后,validity.customError 就会变成 true,则 checkValidity 总是会返回 false。如果要重新判断需要取消自定义提示,方式如下: setCustomValidity(‘‘) setCustomValidity(null) setCustomValidity(undefined) |
以下实例如果输入信息不合法, 则返回错误信息:
- <input id="id1" type="number" min="100" max="300" required>
- <button onclick="myFunction()">验证</button>
- <p id="demo"></p>
- <script>
- function myFunction() {
- var inpObj = document.getElementById("id1");
- if (inpObj.checkValidity() == false) {
- document.getElementById("demo").innerHTML = inpObj.validationMessage;
- }
- }
- </script>
2.2 约束验证 DOM 属性
属性 | 描述 |
---|---|
validity | 布尔属性值,返回 input 输入值是否合法 |
validationMessage | 浏览器错误提示信息 |
willValidate | 指定 input 是否需要验证 |
2.3Validity 属性
input 元素的 validity 属性包含一系列关于 validity 数据属性:
属性 | 描述 |
---|---|
customError | 设置为 true, 如果设置了自定义的 validity 信息。 |
patternMismatch | 设置为 true, 如果元素的值不匹配它的模式属性。 |
rangeOverflow | 设置为 true, 如果元素的值大于设置的最大值。 |
rangeUnderflow | 设置为 true, 如果元素的值小于它的最小值。 |
stepMismatch | 设置为 true, 如果元素的值不是按照规定的 step 属性设置。 |
tooLong | 设置为 true, 如果元素的值超过了 maxLength 属性设置的长度。 |
typeMismatch | 设置为 true, 如果元素的值不是预期相匹配的类型。 |
valueMissing | 设置为 true,如果元素 (required 属性) 没有值。 |
valid | 设置为 true,如果元素的值是合法的。 |
- <input id="id1" type="number" max="100">
- <button onclick="myFunction()">验证</button>
- <p id="demo"></p>
- <script>
- function myFunction() {
- var txt = "";
- if (document.getElementById("id1").validity.rangeOverflow) {
- txt = "输入的值太大了";
- }
- document.getElementById("demo").innerHTML = txt;
- }
- </script>
如果输入的值小于 100, 显示一个信息:
- <input id="id1" type="number" min="100" required>
- <button onclick="myFunction()">OK</button>
- <p id="demo"></p>
- <script>
- function myFunction() {
- var txt = "";
- var inpObj = document.getElementById("id1");
- if(!isNumeric(inpObj.value)) {
- txt = "你输入的不是数字";
- } else if (inpObj.validity.rangeUnderflow) {
- txt = "输入的值太小了";
- } else {
- txt = "输入正确";
- }
- document.getElementById("demo").innerHTML = txt;
- }
- // 判断输入是否为数字
- function isNumeric(n) {
- return !isNaN(parseFloat(n)) && isFinite(n);
- }
- </script>
来源: http://www.bubuko.com/infodetail-2523646.html