记录我学习的完整过程,需要者自行借鉴。
本文主要按模块讲解表单校验的原理,几种常见的js表单校验(非空、正则、限长、等值),只有先砌墙,才能装修。
下面的action="time.html"可以自行更改
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<script>
function $(id) {
var Eid = document.getElementById(id);
return Eid;
}
function check() {
var Eusername = $("username");
if(Eusername.value == "") {
return false;
}
return true;
}
</script>
<body>
<form name="biaodang" action="time.html" οnsubmit="return check();">
<input id="username" type="text" name="name" id="id" />
<input type="submit" value="提交" />
</form>
</body>
</html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<script>
function $(id) {
var Eid = document.getElementById(id);
return Eid;
}
function check() {
var Eusername = $("username");
if(Eusername.value == "") {
return false;
}
return true;
}
</script>
<body>
<form name="biaodang" action="time.html" οnsubmit="return check();">
<input id="username" type="text" name="name" id="id" />
<input type="submit" value="提交" />
</form>
</body>
</html>
总结:校验实现的关键是οnsubmit="return check();中check()的返回的bool值,true则通过,false反之。function $(id) 中$只是函数名(
命名来自网络,觉得好用就跟着用)
非空校验无法满足各种形形色色的需求,所以进一步使用正则表达式来校验。下例子为中文校验
function check() {
var Eusername = $("username");
var username=Eusername.value.trim();
if(username == "") {
return false;
}else if(!reg.test(username))//校验中文,如果是中文返回false
{
return false;
}
return true;
}
var Eusername = $("username");
var username=Eusername.value.trim();
if(username == "") {
return false;
}else if(!reg.test(username))//校验中文,如果是中文返回false
{
return false;
}
return true;
}
在表单校验中的需求
例如用户名、密码等等的长度有限制
function check() {
var Eusername = $("username");
var username = Eusername.value.trim();
var length=username.length;
if(username == "") {
return false;
} else if(length>3) //用户名非空、长度不能大于3
{
return false;
}
return true;
}
var Eusername = $("username");
var username = Eusername.value.trim();
var length=username.length;
if(username == "") {
return false;
} else if(length>3) //用户名非空、长度不能大于3
{
return false;
}
return true;
}
密码与确认密码必须一致
function check() {
var Epassword = $("password");
var password = Epassword.value;
var Erepassword = $("repassword");
var repassword = Erepassword.value;
if(password == "") {
return false;
} else if(password!=repassword) //密码与确认密码必须一致
{
return false;
}
return true;
}
var Epassword = $("password");
var password = Epassword.value;
var Erepassword = $("repassword");
var repassword = Erepassword.value;
if(password == "") {
return false;
} else if(password!=repassword) //密码与确认密码必须一致
{
return false;
}
return true;
}
在熟悉以上基础的校验后,必须学会整合整个表单的校验,在此贴上本人的一次实验题,效果如下图所示:
代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>lailai的js表单校验(一)</title>
</head>
<script>
//id选择器
function $(id) {
var Eid = document.getElementById(id);
return Eid;
}
//校验主函数
function check() {
if(!checkUsername()) {
return false;
}
if(!checkPassword()) {
return false;
}
if(!checkRepassword()) {
return false;
}
if(!checkEmail()) {
return false;
}
if(!checkAccept()) {
return false;
}
return true;
}
//校验用户名由字母开头,后跟字母、数字、或者下划线!
function checkUsername() {
var Eusername = $("username");
var username = Eusername.value.trim();
var sername = username.slice(1);
//alert(sername);
if(username == "") {
return false;
} else if(/^[0-9]{1,20}$/.test(username[0])) {
return false;
} else if((!/^\w+$/.test(sername)) && username.length > 1) {
return false;
}
return true;
}
//校验设置登入密码至少6位!
function checkPassword() {
var Epassword = $("password");
var password = Epassword.value;
var length = password.length;
if(password == "") {
return false;
} else if(length <= 6) //密码长度必须大于6位
{
return false;
}
return true;
}
//校验 重复密码输入与密码值相同
function checkRepassword() {
var Epassword = $("password");
var password = Epassword.value;
var Erepassword = $("repassword");
var repassword = Erepassword.value;
//alert(password);
//alert(repassword);
if(password != repassword) //密码与确认密码必须一致
{
return false;
}
return true;
}
//校验邮箱格式
function checkEmail() {
var Eemail = $("email");
var email = Eemail.value.trim();
if(email == "") {
return false;
} else if(!/^([0-9A-Za-z\-_\.]+)@([0-9a-z]+\.[a-z]{2,3}(\.[a-z]{2})?)$/g.test(email)) //校验是否为有效邮箱
{
return false;
}
return true;
}
//校验用户协议被勾选
function checkAccept() {
var Eaccept = $("accept");
if(!Eaccept.checked) {
return false;
}
return true;
}
</script>
<body>
<div>
<h1 align="center" style="color: cornflowerblue;">用户注册</h1>
<form name="form" action="time.html" οnsubmit="return check();">
<table border="1px" align="center">
<tr>
<td align="right"><strong>用户名:*</strong> <input type="text" id="username" name="username" maxlengtd="" size="6" value="" style="width: 150px;" /></td>
<td>用户名由字母开头,后跟字母、数字、或者下划线!</td>
</tr>
<tr>
<td align="right"><strong>密码:*</strong><input type="password" id="password" name="password" maxlengtd="" size="4" value="" style="width: 150px;" /></td>
<td>设置登入密码至少6位!</td>
</tr>
<tr>
<td align="right"><strong>确认密码:*</strong><input type="password" id="repassword" name="repassword" maxlengtd="" size="4" value="" style="width: 150px;" /></td>
<td>
请再次输入你的密码!</td>
</tr>
<tr>
<td align="center" colspan="2"><strong>性别:*</strong><input type="radio" name="sex" checked="checked" />男<input type="radio" name="sex" />女</td>
</tr>
<tr>
<td><strong>邮箱地址:*</strong><input type="text" id="email" name="email" maxlengtd="" size="4" value="" style="width: 150px;" /></td>
<td>请填写您的常用邮箱,可以 用此邮箱找回密码!</td>
</tr>
<tr>
<td colspan="2" align="center"><strong>基本情况:*</strong><textarea name="info" rows="" cols=""></textarea></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="checkbox" id="accept" name="sex" checked="checked" /> 我已经仔细阅读并同意接受用户使用协议
</td>
</tr>
<tr>
<td align="center"><input type="submit" value="确认" /><br /> </td>
<td align="center"><input type="reset" value="取消" /><br /></td>
</tr>
</table>
</form>
</div>
</body>
</html>
以上的不足之处:我实现的是一次提交,校验全部校验项,如果符合全部要求则,跳转到time.html,否则拒绝提交。这样的用户体验
不够好,需要一项一项进行校验并给出错误提示。
不够好,需要一项一项进行校验并给出错误提示。
代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>lailai的js表单校验(二)</title>
<link rel="stylesheet" href="css/checkInfo.css" />
</head>
<script>
//id选择器
function $(id) {
var Eid = document.getElementById(id);
return Eid;
}
//校验主函数
function check() {
if(!checkUsername()) {
return false;
}
if(!checkPassword()) {
return false;
}
if(!checkRepassword()) {
return false;
}
if(!checkEmail()) {
return false;
}
if(!checkAccept()) {
return false;
}
return true;
}
//校验用户名由字母开头,后跟字母、数字、或者下划线!
function checkUsername() {
var Eusername = $("username");
var username = Eusername.value.trim();
var sername = username.slice(1);
if(username == "") {
return false;
} else if(/^[0-9]{1,20}$/.test(username[0])) {
return false;
} else if((!/^\w+$/.test(sername)) && username.length > 1) {
return false;
}
return true;
}
//校验设置登入密码至少6位!
function checkPassword() {
var Epassword = $("password");
var password = Epassword.value;
var length = password.length;
if(password == "") {
return false;
} else if(length <= 6) //密码长度必须大于6位
{
return false;
}
return true;
}
//校验 重复密码输入与密码值相同
function checkRepassword() {
var Epassword = $("password");
var password = Epassword.value;
var Erepassword = $("repassword");
var repassword = Erepassword.value;
if(password != repassword) //密码与确认密码必须一致
{
return false;
}
return true;
}
//校验邮箱格式
function checkEmail() {
var Eemail = $("email");
var email = Eemail.value.trim();
if(email == "") {
return false;
} else if(!/^([0-9A-Za-z\-_\.]+)@([0-9a-z]+\.[a-z]{2,3}(\.[a-z]{2})?)$/g.test(email)) //校验是否为有效邮箱
{
return false;
}
return true;
}
//校验用户协议被勾选
function checkAccept() {
var Eaccept = $("accept");
EusernameInfo = $("accept_info");
if(!Eaccept.checked) {
EusernameInfo.className = "error_prompt";
return false;
}
return true;
}
</script>
<script>
function username_onfocus() {
EusernameInfo = $("username_info");
EusernameInfo.innerHTML = "用户名由字母开头,后跟字母、数字、或者下划线!";
EusernameInfo.className = "import_prompt";
}
function username_onblur() {
if(!checkUsername()) {
EusernameInfo.className = "error_prompt";
}
}
function password_onfocus() {
EpasswordInfo = $("password_info");
EpasswordInfo.innerHTML = "设置登入密码至少6位!";
EpasswordInfo.className = "import_prompt";
}
function password_onblur() {
if(!checkPassword()) {
EpasswordInfo.className = "error_prompt";
}
}
function repassword_onfocus() {
ErepasswordInfo = $("repassword_info");
ErepasswordInfo.innerHTML = "请再次输入你的密码!";
ErepasswordInfo.className = "import_prompt";
}
function repassword_onblur() {
if(!checkRepassword()) {
ErepasswordInfo.className = "error_prompt";
}
}
function email_onfocus() {
EemailInfo = $("email_info");
EemailInfo.innerHTML = "请填写您的常用邮箱,可以 用此邮箱找回密码!";
EemailInfo.className = "import_prompt";
}
function email_onblur() {
if(!checkEmail()) {
EemailInfo.className = "error_prompt";
}
}
</script>
<body>
<div>
<h1 align="center" style="color: cornflowerblue;">用户注册</h1>
<form name="form" action="time.html" οnsubmit="return check();">
<table border="1px" align="center">
<tr>
<td align="right"><strong>用户名:*</strong> <input type="text" id="username" name="username" οnfοcus="username_onfocus()" οnblur="username_onblur()" maxlengtd="" size="6" value="" style="width: 150px;" /></td>
<td>
<div id="username_info"></div>
</td>
</tr>
<tr>
<td align="right"><strong>密码:*</strong><input type="password" id="password" name="password" οnfοcus="password_onfocus()" οnblur="password_onblur()" maxlengtd="" size="4" value="" style="width: 150px;" /></td>
<td>
<div id="password_info"></div>
</td>
</tr>
<tr>
<td align="right"><strong>确认密码:*</strong><input type="password" id="repassword" οnfοcus="repassword_onfocus()" οnblur="repassword_onblur()" name="repassword" maxlengtd="" size="4" value="" style="width: 150px;" /></td>
<td>
<div id="repassword_info"></div>
</td>
</tr>
<tr>
<td align="center"><strong>性别:*</strong><input type="radio" name="sex" checked="checked" />男<input type="radio" name="sex" />女</td>
<td><strong>基本情况:*</strong><textarea name="info" rows="" cols=""></textarea></td>
</tr>
<tr>
<td><strong>邮箱地址:*</strong><input type="text" id="email" name="email" οnfοcus="email_onfocus()" οnblur="email_onblur()" maxlengtd="" size="4" value="" style="width: 150px;" /></td>
<td>
<div id="email_info"></div>
</td>
</tr>
<tr>
<td colspan="2" align="center"><input type="checkbox" id="accept" name="sex" checked="checked" />
<div id="accept_info" style="display: inline-block;">我已经仔细阅读并同意接受用户使用协议</div>
</td>
</tr>
<tr>
<td align="center"><input type="submit" value="确认" /><br /> </td>
<td align="center"><input type="reset" value="取消" /><br /></td>
</tr>
</table>
</form>
</div>
</body>
</html>
其中引入的css文件 checkInfo.css 代码如下
/*当鼠标放到文本框时,提示文本的样式*/
.import_prompt {
border: solid 1px #ffcd00;
background-color: #ffffda;
padding-left: 5px;
padding-right: 5px;
line-height: 20px;
}
/*当文本框内容不符合要求时,提示文本的样式*/
.error_prompt {
border: solid 1px #ff3300;
background-color: #fff2e5;
background-repeat: no-repeat;
background-position: 5px 2px;
padding: 2px 5px 0px 25px;
line-height: 20px;
}
至此,对于js的表单手写验证到此为止,接下来时间允许的话,笔者会往插件方向涉及,感兴趣的朋友关注我,文章还在继续编写中。。。。。。。。