title: 正则表达式表单验证实例
toc: true
comments: true
tags: 前端
abbrlink: dd22a738
date: 2021-06-04 22:22:54
categories:
html+css+js简单实现正则表达式表单验证 !
[TOC]
(一)基本元字符
/*常用的元字符*/
//=>1. 量词元字符: 设置出现的次数
* 零到多次
+ 一到多次
? 零次或者一次
{n} 出现n次
{n, }出现n到多次
{n, m} 出现n到多次
//=>2. 特殊元字符: 单个或者组合在一起代表特殊的含义
转义字符(普通->特殊->普通)
. 除n(换行符)以外的任意字符
^ 以哪一个元字符作为开始
$ 以哪一个元字符作为开始
n 换行符
d 0~9之间的一个数字
D 非0~9之间的一个数字(大写和小写的意思是相反的)
w 数字,字母,下划线中的任意一个字符
s 一个空白字符(包含空格,制表符,换页符等)
t 一个制表符(一个TAB键: 四个空格)
b 匹配一个单词的边界
x|y x或者y中的一个字符
[xyz] x或者y或者z中的一个字符
[^xy] 除了x/y以外的任意字符
[a-z] 指定a-z这个范围中的任意字符 [0-9a-zA-Z]===w
[^a-z] 上一个的取反"非"
() 正则中的分组符号
(?:) 只匹配不捕获
(?=) 正向预查
(?!) 负向预查
//=>3. 普通元字符: 代表本身含义的
/zhufeng/ 此正则表达式匹配的就是"zhufeng"
/*正则表达式常用的修饰符: img*/
i => ignoreCase 忽略单词大小写匹配
m => multiline 可以进行多行匹配
g => global 全局匹配
/*
/A/.test('lalala') => false
/A/i.test('lalala') => true
*/
- 注意正则表达式中不要出现空格,因为空格也会被算作是一个字字符去进行匹配
- 匹配的顺序也很重要,如果你匹配的一部分是或的逻辑,那么就应该将最详细的放在前面
如:
(nd+.d+.d+)|(nd+.d+)|(nd+)
匹配前:
匹配后:
如果将顺序倒过来:
(nd+)|(nd+.d+)|(nd+.d+.d+)
匹配结果:
可以看到,匹配后结果只匹配并替换了(nd+)
,而导致后面的两个或条件没有匹配到
(二)登录框用户名,密码验证
显示结果:
- 写内容
1.1 写容器以及把整个页面分为标题,主体,页脚三部分
<div id="container">
<div id="title"></div>
<div id="body"></div>
<div id="footer"></div>
</div>
1.2 标题部分:
<div id="container">
<div id="title">账户登录</div>
</div>
1.3 再加上两个输入框以及一个按钮
<div id="body">
<input id="yhm" placeholder="html请输入用户名" />
<input id="pwd" type="password" placeholder="请输入您的密码" />
</div>
<button>登录</button>
1.4 另外, 还要校验做输入后判断的提示信息, 这里如果输入内容合法, 就在右边显示一个小勾的图片, 当然, 未输入或输入错误是不会显示的, 所以我们先不给它的src
内容
<div id="container">
<div id="title">账户登录</div>
<div id="body">
<input id="yhm" placeholder="请输入用户名" />
<img id="yhmR" src="" alt="" />
<input id="pwd" type="password" placeholder="请输入您的密码" />
<img id="pwdR" src="" alt="" />
</div>
<button>登录</button>
</div>
1.5 然后就是输入不正确时的提示
<div id="container">
<div id="title">账户登录</div>
<div id="body">
<input id="yhm" placeholder="请输入用户名" />
<img id="yhmR" src="" alt="" />
<div id="yhmC"></div>
<input id="pwd" type="password" placeholder="请输入您的密码" />
<img id="pwdR" src="" alt="" />
<div id="pwdC"></div>
</div>
<button>登录</button>
</div>
- 写内容显示的效果
2.1 容器显示效果
#container{
width: 200px;
height: 170px;
padding: 15px;
text-align: center;
margin: 0 auto;
background-color: white;
}
2.2 标题部分
#container{
width: 200px;
height: 170px;
padding: 15px;
text-align: center;
margin: 0 auto;
background-color: white;
}
#title{
color: red;
position: relative;
}
2.3 主体部分以及按钮
#body > input{
margin-top: 20px;
width: 150px;
height: 20px;
border: 1px solid gray;
outline: none;
padding-left:20px;
}
#body > div{
height: 10px;
color: red;
font-size: 10px;
}
img{
height: 10px;
color: red;
font-size: 10px;
}
button{
width: 100px;
height: 25px;
background-color: red;
margin-top: 20px;
}
登录框显示:
- 写控制脚本
这里就是使用正则表达式来校验输入内容的地方,要求是用户名为字母数字组成, 密码为6位数字
3.1 先通过id获取到这两个输入框对象, 并给它们绑定失去焦点或的动作脚本函数
document.getElementById("yhm").onblur = function(){
}
document.getElementById("pwd").onblur = function(){
}
3.2 然后获取到输入框标签,输入错误提示标签以及输入正确提示标签
document.getElementById("yhm").onblur = function(){
var yhmVal = document.getElementById("yhm").value;
var yhmC = document.getElementById("yhmC");
var yhmR = document.getElementById("yhmR");
}
document.getElementById("pwd").onblur = function(){
var pwdVal = document.getElementById("pwd").value;
var pwdC = document.getElementById("pwdC");
var pwdR = document.getElementById("pwdR");
}
3.3 再用正则表达式对用户名和密码进行校验, 并用一个临时变量接住它们来进行下一步操作, 如果想对输入内容是否是汉字或者是否是邮箱进行校验, 也可以用下面两个注释了的正则表达式
document.getElementById("yhm").onblur = function(){
var yhmVal = document.getElementById("yhm").value;
var yhmC = document.getElementById("yhmC");
var yhmR = document.getElementById("yhmR");
console.log(yhmVal);
var ret = /^w+$/.test(yhmVal);//校验字母和数字
//var ret = /[u2E80-u9FFF]+$/.test(yhmVal);//校验汉字
//var ret = /^w+@w+.w+$/.test(yhmVal);//校验邮箱
}
document.getElementById("pwd").onblur = function(){
var pwdVal = document.getElementById("pwd").value;
var pwdC = document.getElementById("pwdC");
var pwdR = document.getElementById("pwdR");
var ret = /^d{6}$/.test(pwdVal);
}
3.4 然后再处理一下即可
document.getElementById("yhm").onblur = function(){
var yhmVal = document.getElementById("yhm").value;
var yhmC = document.getElementById("yhmC");
var yhmR = document.getElementById("yhmR");
var ret = /^w+$/.test(yhmVal);//校验字母和数字
//var ret = /[u2E80-u9FFF]+$/.test(yhmVal);//校验汉字
//var ret = /^w+@w+.w+$/.test(yhmVal);//校验邮箱
if(false == ret){
yhmR.src = "";
yhmC.innerHTML="用户名为字母和数字组成!";
return false;
}else{
yhmR.src = "../../img/ok_48px.png";
yhmC.innerHTML="";
return true;
}
}
document.getElementById("pwd").onblur = function(){
var pwdVal = document.getElementById("pwd").value;
var pwdC = document.getElementById("pwdC");
var pwdR = document.getElementById("pwdR");
var ret = /^d{6}$/.test(pwdVal);
if(false == ret){
pwdR.src = "";
pwdC.innerHTML="密码需为6位数字!";
return false;
}else{
pwdR.src = "../../img/ok_48px.png";
pwdC.innerHTML="";
return true;
}
}
显示结果:
- 其他正则表达式校验
4.1 邮政编码:
4.2 手机号码:
4.3 年龄:
4.4 邮箱:
4.5 用户名:
4.6 生日
4.7 IP地址
4.8 网址
- 源代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登录框用户名,密码验证3</title>
</head>
<style type="text/css">
body {
background-color: darkgray;
}
#container{
width: 200px;
height: 190px;
padding: 15px;
text-align: center;
margin: 0 auto;
background-color: white;
}
#title{
color: red;
position: relative;
}
#body > input{
margin-top: 20px;
width: 150px;
height: 20px;
border: 1px solid gray;
outline: none;/*去掉input点击后边框颜色*/
padding-left:20px;
}
#body > div{
height: 10px;
color: red;
font-size: 10px;
}
img{
height: 10px;
color: red;
font-size: 10px;
}
button{
width: 100px;
height: 25px;
background-color: red;
margin-top: 20px;
}
</style>
<body>
<div id="container">
<div id="title">账户登录</div>
<div id="body">
<input id="yhm" placeholder="请输入用户名" />
<img id="yhmR" src="" alt="" />
<div id="yhmC"></div>
<input id="pwd" type="password" placeholder="请输入您的密码" />
<img id="pwdR" src="" alt="" />
<div id="pwdC"></div>
</div>
<button>登录</button>
</div>
<script type="text/javascript">
document.getElementById("yhm").onblur = function(){
var yhmVal = document.getElementById("yhm").value;
var yhmC = document.getElementById("yhmC");
var yhmR = document.getElementById("yhmR");
console.log(yhmVal);
var ret = /^w+$/.test(yhmVal);//校验字母和数字
//var ret = /[u2E80-u9FFF]+$/.test(yhmVal);//校验汉字
//var ret = /^w+@w+.w+$/.test(yhmVal);//校验邮箱
console.log(ret)
if(false == ret){
yhmR.src = "";
yhmC.innerHTML="用户名为字母和数字组成!";
return false;
}else{
yhmR.src = "../../img/ok_48px.png";
yhmC.innerHTML="";
return true;
}
}
document.getElementById("pwd").onblur = function(){
var pwdVal = document.getElementById("pwd").value;
var pwdC = document.getElementById("pwdC");
var pwdR = document.getElementById("pwdR");
console.log(pwdVal);
var ret = /^d{6}$/.test(pwdVal);
if(false == ret){
pwdR.src = "";
pwdC.innerHTML="密码需为6位数字!";
return false;
}else{
pwdR.src = "../../img/ok_48px.png";
pwdC.innerHTML="";
return true;
}
}
</script>
</body>
</html>