表单验证的实现思路
- 首先获取表单元素的值
- 根据业务规则,对获取的数据进行判断
- 但表单提示时,触发onsubmit事件,对获取的数据进行验证
验证方式
- String对象的属性和方法
- 正则表达式
String对象常用的属性和方法(与java的String对象的方法用法类似)
属性:
- length:返回字符串的长度(包括空格等)
方法:
- toLowerCase():把字符串转化为小写
- toUpperCase:把字符串转化为大写
- char At(index):返回在指定位置的字符
- indexOf(str,str):查找某个指定的字符串在字符串中首次出现的位置
- substring(index1,index2):返回位于指定索引index1和index2之间的字符串,并且包括索引index1对应的字符,不包括索引index2对应的字符
文本框对象(常用的属性、方法和事件)
属性:
- id:设置或返回文本域的id
- value:设置或返回文本域的value属性的值
方法:
- blur():从文本域中移开焦点
- focus():在文本域中设置焦点,即获得鼠标光标
- select():选取文本域中的内容
事件:
- onblur:失去焦点,当光标离开某个文本框时触发
- infocus:获得焦点,当光标进入某个文本框时触发
- onkeypress:某个键盘按键被按下并松开
正则表达式
- 正则表达式是对字符串操作的一种逻辑公式,就是用事件定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”
- 这个“规则字符串”用来表达对字符串的一种过滤逻辑
- RegExp对象是Regular Expression(正则表达式)的缩写,它是对字符串执行模式匹配的强大工具
正则表达式中常用的符号和用法
- /.../:代表一个模式的开始和结束
- ^:匹配字符串的开始
- $:匹配字符串的结束
- \s:任何空白字符
- \S:任何非空白字符
- \d:匹配一个数字字符,等价于[0-9]
- \D:除了数字之外的任何字符,等价于[^0-9]
- \w:匹配一个数字、下划线或字母字符,等价于[A-Za-z0-9_]
- . :除了换行符之外的任意字符
正则表达式的重复字符
- {n}:匹配前一项n次
- {n,}:匹配前一次n次,或者多次
- {n,m}:匹配前一项至少n次,但是不能超过m次
- *:匹配前一项0次或多次,等价于{0,}
- +:匹配前一项1次或多次,等价于{1,}
- ?:匹配前一项0次或1次,也就是说前一项是可选的,等价于{0,1}
定义正则表达式
普通方法:
var reg=/表达式/附加参数
构造函数:
var reg=new RegExp("表达式",“附加参数”)
RegExp对象的方法
- exec:检索字符中是正则表达式的区配,返回找到的值,并确定其位置
- test:检索字符串中指定的值,返回true或false
RegExp对象的属性
- global:RegExp对象是否具有标志g
- ignoreCase:RegExp对象是否具有标志i
String对象的方法
- match:找到一个或多个正则表达式的匹配
- search:检索与正则表达式相匹配的值
- replace:替换与正则表达式匹配的字符串
- split:把字符串分割为字符串数组
以下为实例:
<!DOCTYPE html> <html> <head> <title>表单验证</title> <meta charset="utf-8"> </head> <body> <!--表单注册页面 onsumit:提交表单做验证--> <form method="get" action="#" onsubmit="return check()"> 用户名:<input type="text" name="username"><span id="nameSpan"></span><br/> 密码:<input type="" name="password"><span id="pwdSpan"></span><br/> 再次输入密码:<input type="" name="rePassword"><span id="repwdSpan"></span><br/> Email:<input type="" name="email"><span id="emailSpan"></span><br/> <input type="submit" name="" value="注册"> <input type="reset" name="" value="重置"> </form> </body> </html> <!--js代码--> <script type="text/javascript"> function check(){ var uname=document.getElementsByName("username")[0].value var pwd=document.getElementsByName("password")[0].value var repwd=document.getElementsByName("rePassword")[0].value var email=document.getElementsByName("email")[0].value //取用户名的长度 var namelength=uname.length; //获取span对象 var nameSpan=document.getElementById("nameSpan"); if(namelength==0){ nameSpan.innerHTML='用户名不能为空'; return false; }else if(namelength<4||namelength>16){ nameSpan.innerHTML='用户名必须在4-16位之间'; return false; } //获取密码的长度 var pwdlength=pwd.length; //获取span对象 var pwdSpan=document.getElementById("pwdSpan"); if(pwdlength==0){ pwdSpan.innerHTML='密码不能为空'; return false; }else if(pwdlength<6){ pwdSpan.innerHTML='密码不能少于6位'; return false; } if(pwd!=repwd){ var repwdSpan=document.getElementById("repwdSpan"); repwdSpan.innerHTML='两次密码输入不一致'; return false; } if(email.indexOf(".")==-1||email.indexOf("@")==-1){ var emailSpan=document.getElementById("emailSpan"); repwdSpan.innerHTML='邮箱格式不正确'; return false; } //正确 return true; } </script>
该实例中,首先获取了用户输入的用户名,密码等信息,然后获取各字段的长度。通过if语句进行判断。通过输入框后面的span,动态判断用户是否输入合法。
获取光标事件
<!DOCTYPE html> <html> <head> <title></title> <meta charset="utf-8"> </head> <body> <!--获取光标事件 onfocus--> emil:<input type="text" onfocus="clearText()" id="email" placeholder="请输入邮箱地址" type="email"> </body> </html> <script type="text/javascript"> function clearText(){ var email=document.getElementById("email"); email.placeholder=""; } </script>
当鼠标点击输入框内时,输入框中的提示文字会自动消失。此效果通过获取光标事件:onfocus来实现。
<!DOCTYPE html> <html> <head> <title>表单验证</title> <meta charset="utf-8"> </head> <body> <!--表单注册页面 onsumit:提交表单做验证--> <form method="get" action="success.html" onsubmit="return check()"> 用户名:<input type="text" onblur="checkname()" name="username"><span id="nameSpan"></span><br/> 密码:<input type="password" onblur="checkpwd()" name="password"><span id="pwdSpan"></span><br/> 再次输入密码:<input type="password" onblur="checkrepwd()" name="rePassword"><span id="repwdSpan"></span><br/> Email:<input type="" onblur="checkmail()" name="email"><span id="emailSpan"></span><br/> <input type="submit" name="" value="注册"> <input type="reset" name="" value="重置"> </form> </body> </html> <!--js代码--> <script type="text/javascript"> function check(){ /*if(checkname()&&checkpwd()&&checkrepwd()&&checkmail()){ return true; } return false; */ return checkname()&&checkpwd()&&checkrepwd()&&checkmail(); } //用户名 function checkname(){ var uname=document.getElementsByName("username")[0].value; //取用户名的长度 var namelength=uname.length; //获取span对象 var nameSpan=document.getElementById("nameSpan"); if(namelength==0){ nameSpan.innerHTML='用户名不能为空'; return false; }else if(namelength<4||namelength>16){ nameSpan.innerHTML='用户名必须在4-16位之间'; return false; } nameSpan.innerHTML=''; return true; } //密码 function checkpwd(){ var pwd=document.getElementsByName("password")[0].value; //获取密码的长度 var pwdlength=pwd.length; //获取span对象 var pwdSpan=document.getElementById("pwdSpan"); if(pwdlength==0){ pwdSpan.innerHTML='密码不能为空'; return false; }else if(pwdlength<6){ pwdSpan.innerHTML='密码不能少于6位'; return false; } pwdSpan.innerHTML=''; return true; } //再次输入密码 function checkrepwd(){ var pwd=document.getElementsByName("password")[0].value; var repwd=document.getElementsByName("rePassword")[0].value; var repwdSpan=document.getElementById("repwdSpan"); if(pwd!=repwd){ repwdSpan.innerHTML='两次密码输入不一致'; return false; } repwdSpan.innerHTML=''; return true; } //邮箱 function checkmail(){ var email=document.getElementsByName("email")[0].value; var emailSpan=document.getElementById("emailSpan"); if(email.indexOf(".")==-1||email.indexOf("@")==-1){ emailSpan.innerHTML='邮箱格式不正确'; return false; } emailSpan.innerHTML=''; return true; } </script>
以上达到的页面效果为,当用户输入用户名时,会使用获取光标时间,实时改变span内的提示语。用户名、邮箱、密码、再次输入密码分别进行判断。如果合法则返回true,不合法返回false。
正则表达式:
替换字符串中的a,变为H
(普通写法)
var regExp=/a/ig;
//定义一个字符串
var str="Abbcjdkca";
var newstr=str.replace(regExp,'H');
alert(newstr);
(构造函数写法)
var str1="aaaaaaaaaaaa";
var regExp1=new RegExp('a','ig');
var newstr1=str1.replace(regExp1,'B');
alert(newstr1);
固定电话 区号为3位或4位,号码为7位或8位。
var regExp2=/^\d{3,4}-\d{7,8}$/; var phone="037-23742934"; if (!regExp2.test(phone)) { alert("电话格式输入错误") }else{ alert("正确,号码为:"+phone) }
4-16位用户名
var regExp3=/^\w{4,16}$/
输入一个手机,判断全部是数字
var regExp4=/^\d{11}$/
以下为通过正则表达式达到简单表单验证的实例:
<!DOCTYPE html> <html> <head> <title>改-正则表达式-表单验证</title> <meta charset="utf-8"> </head> <body> <!--表单注册页面 onsumit:提交表单做验证--> <form method="get" action="success.html" onsubmit="return check()"> 用户名:<input type="text" onblur="checkname()" name="username"><span id="nameSpan"></span><br/> 密码:<input type="password" onblur="checkpwd()" name="password"><span id="pwdSpan"></span><br/> 再次输入密码:<input type="password" onblur="checkrepwd()" name="rePassword"><span id="repwdSpan"></span><br/> Email:<input type="" onblur="checkmail()" name="email"><span id="emailSpan"></span><br/> <input type="submit" name="" value="注册"> <input type="reset" name="" value="重置"> </form> </body> </html> <!--js代码--> <script type="text/javascript"> function check(){ return checkname()&&checkpwd()&&checkrepwd()&&checkmail(); } //用户名 function checkname(){ var uname=document.getElementsByName("username")[0].value; //获取span对象 var nameSpan=document.getElementById("nameSpan"); var regExp3=/^\w{4,16}$/;//用户名在4-16位之间的正则表达式 if (!regExp3.test(uname)) { nameSpan.innerHTML='用户名必须在4-16位之间'; return false; } nameSpan.innerHTML=''; return true; } //密码 function checkpwd(){ var pwd=document.getElementsByName("password")[0].value; //获取span对象 var pwdSpan=document.getElementById("pwdSpan"); var regExp3=/^\w{6,}$/; if(!regExp3.test(pwd)){ pwdSpan.innerHTML='密码不能少于6位'; return false; } pwdSpan.innerHTML=''; return true; } //再次输入密码 function checkrepwd(){ var pwd=document.getElementsByName("password")[0].value; var repwd=document.getElementsByName("rePassword")[0].value; var repwdSpan=document.getElementById("repwdSpan"); if(pwd!=repwd){ repwdSpan.innerHTML='两次密码输入不一致'; return false; } repwdSpan.innerHTML=''; return true; } //邮箱 function checkmail(){ var email=document.getElementsByName("email")[0].value; var emailSpan=document.getElementById("emailSpan"); var regExp=/^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.[a-zA-Z0-9]{2,6}$/; if(!regExp.test(email)){ emailSpan.innerHTML='邮箱格式不正确'; return false; } emailSpan.innerHTML=''; return true; } </script>