JavaScript对表单、数字输入的验证

1.JavaScript验证表单
HTML表单验证能够通过JavaScript来完成。如果某个表单字段(fname)是空的,那么该函数会发出一条警告消息,并返回false,以防止表单被提交出去:
function validateForm() {
    var x = document.forms["myForm"]["fname"].value;
    if (x == "") {
        alert("必须填写姓名");
        return false;
    }
}
该函数能够在表单提交时被调用:
<form name="myForm" action="/action_page_post.php" onsubmit="return validateForm()" method="post">
姓名:<input type="text" name="fname">
<input type="submit" value="Submit">
</form>
 
2.JavaScript验证数字输入
(1)JavaScript常用于验证数字输入:请输入1到10之间的数字:
<script>
function myFunction() {
  var x, text;
  x = document.getElementById("numb").value;
  if (isNaN(x) || x < 1 || x > 10) {
    text = "输入无效";
  } else {
    text = "输入有效";
  }
  document.getElementById("demo").innerHTML = text;
}
</script>
(2)自动HTML表单验证
HTML表单验证能够被浏览器自动执行,如果表单字段(fname)是空的,required属性防止表单被提交:
<form action="/action_page_post.php" method="post">
   <input type="text" name="fname" required>
   <input type="submit" value="Submit">
</form>
自动HTML表单验证不适用 Internet Explorer 9或更早的版本。
 
3.数据验证
数据验证指的是确保干净、正确和有用的用户输入的过程。典型的验证任务是:用户是否已填写所有必需的字段?用户是否已输入有效的日期?用户是否在数字字段中输入了文本?大多数情况下,数据验证的作用是确保正确的用户输入。
验证可以通过很多不同的方法来定义,并且可以使用很多不同的方法来开发。
服务器端验证是由web服务器执行的,在输入被送往服务器之后。客户端验证是由web浏览器执行的,在输入被送往web服务器之前。
HTML5引入了一种新的HTML验证概念,名为约束验证(constraint validation)。HTML约束验证基于:约束验证HTML输入属性、约束验证CSS伪选择器、约束验证DOM属性和方法。
(1)约束验证HTML输入属性
属性 描述
disabled 规定 input 元素应该被禁用
max 规定 input 元素的最大值
min 规定 input 元素的最小值
pattern 规定 input 元素的值模式
required 规定输入字段需要某个元素
type 规定 input 元素的类型

(2)约束验证CSS伪选择器
选择器 描述
:disabled 选择设置了 "disabled" 属性的 input 元素。
:invalid 选择带有无效值的 input 元素。
:optional 选择未设置 "required" 属性的 input 元素。
:required 选择设置了 "required" 属性的 input 元素。
:valid 选择带有有效值的 input 元素。
(3)约束验证DOM属性和方法
 
①约束验证DOM方法
checkValidity() 返回true,如果input元素包含有效数据;setCustomValidity(),设置input元素的validationMessage属性。
<input id="id1" type="number" min="100" max="300" required>
<button onclick="myFunction()">OK</button>
<p id="demo"></p>
<script>
 function myFunction() {
    var inpObj = document.getElementById("id1");
    if (inpObj.checkValidity() == false) {
        document.getElementById("demo").innerHTML = inpObj.validationMessage;
    }
}
</script>
 
②约束验证DOM属性
A.基本属性
属性 描述
validity 包含与 input 元素的合法性相关的布尔属性。
validationMessage 包含当 validity 为 false 时浏览器显示的消息。
willValidate 指示是否验证 input 元素。
 
B.合法属性
属性 描述
customError 设置为 true,如果设置自定义的合法性消息。
patternMismatch 设置为 true,如果元素值不匹配其 pattern 属性。
rangeOverflow 设置为 true,如果元素值大约其 max 属性。
rangeUnderflow 设置为 true,如果元素值小于其 min 属性。
stepMismatch 当字段拥有 step 属性,且输入的 value 值不符合设定的间隔值时,该属性值为 true。
tooLong 设置为 true,如果元素值超过了其 maxLength 属性。
typeMismatch 当字段的 type 是 email 或者 url 但输入的值不是正确的类型时,属性值为 true。
valueMissing 设置为 true,如果元素(包含 required)没有值。
valid 设置为 true,如果元素值是有效的。

C.案例
如果输入字段中的数字大于 100(input元素的max属性),则显示一条消息:rangeOverflow属性
<input id="id1" type="number" max="100">
<button onclick="myFunction()">OK</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元素的min属性),则显示一条消息:rangeUnderflow属性
<input id="id1" type="number" min="100">
<button onclick="myFunction()">OK</button>
<p id="demo"></p>
<script>
function myFunction() {
     var txt = "";
    if (document.getElementById("id1").validity.rangeUnderflow) {
        txt = "值太小";
    }
     document.getElementById("demo").innerHTML = txt;
}
</script>