一个简单的HTML页面 利用javascript知识点 和正则表达公式 练习巩固一下
然后突发奇想 仿制一下QQ的注册页面(仅校验部分)
?一、前言
?
?
?
?
欧克欧克,完事了 总结一下 模仿的超级烂 但是里面知识点 是javascript中比较经典的了 因为这些功能截止到现在大都相同 剩下的就是细节优化 界面美化了 看图
1.1、表单提交的效果图
1.2、表单校验信息提示效果图
?
?二、主要代码
2.1、<style>部分
<style>
* {
margin: 0px;
padding: 0px;
box-sizing: border-box;
}
body {
background: url("img/register_bg.png") no-repeat center;
padding-top: 25px;
}
.rg_layout {
width: 900px;
height: 500px;
border: 8px solid #EEEEEE;
background-color: white;
/*让div水平居中*/
margin: auto;
}
.rg_left {
/*border: 1px solid red;*/
float: left;
margin: 15px;
}
.rg_left > p:first-child {
color: #FFD026;
font-size: 20px;
}
.rg_left > p:last-child {
color: #A6A6A6;
font-size: 20px;
}
.rg_center {
float: left;
/* border: 1px solid red;*/
}
.rg_right {
/*border: 1px solid red;*/
float: right;
margin: 15px;
}
.rg_right > p:first-child {
font-size: 15px;
}
.rg_right p a {
color: pink;
}
.td_left {
width: 100px;
text-align: right;
height: 45px;
}
.td_right {
padding-left: 50px;
}
#username, #password, #email, #name, #phone, #birthday, #checkcode {
width: 251px;
height: 32px;
border: 1px solid #A6A6A6;
/*设置边框圆角*/
border-radius: 5px;
padding-left: 10px;
}
#checkcode {
width: 110px;
}
#img_check {
height: 32px;
vertical-align: middle;
}
#btn_sub {
width: 150px;
height: 40px;
background-color: #FFD026;
border: 1px solid #FFD026;
}
#cen_sub {
padding-left: 150px;
}
#chck {
color: #A6A6A6;
padding-left: 150px;
padding-top: 20px;
}
/*提示成功显示*/
.error {
color: red;
}
span{
margin-left: 100px;
}
.correct {
display: inline-block;
width: 10px;
height: 3px;
background: #008100;
line-height: 0;
font-size: 0;
vertical-align: middle;
-webkit-transform: rotate(45deg);
}
.correct:after {
content: '/';
display: block;
width: 20px;
height: 3px;
background: #008100;
-webkit-transform: rotate(-90deg) translateY(-50%) translateX(50%);
}
#img_static{
width: 20px;height: 15px;
}
</style>
2.2、<script>部分
<script>
window.onload = function () {
//绑定onsubmit事件
document.getElementById("form").onsubmit = function () {
//用户校验
//密码校验
//邮箱校验
//姓名校验
//手机号校验
//出生日期校验
//验证码校验
//服务条款校验
img_static();
return checkUsername() && checkPassword() && checkEamil() && checkName() && checkPhone() && checkBirthday() && checkbox();
}
//给用户名和密码框分别绑定离焦事件
document.getElementById("username").onmouseout = checkUsername;
document.getElementById("password").onmouseout = checkPassword;
document.getElementById("email").onmouseout = checkEamil;
document.getElementById("name").onmouseout = checkName;
document.getElementById("phone").onmouseout = checkPhone;
document.getElementById("birthday").onmouseout = checkBirthday;
document.getElementById("img_static").onmouseup = img_static;
document.getElementById("btn_sub").onmouseup = checkbox;
}
//用户校验
function checkUsername() {
//获取值
var username = document.getElementById("username").value;
//定义正则
var reg_username = /^[a-zA-Z][a-zA-Z0-9_]{4,15}$/;//帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线)
//校验正则
var flag = reg_username.test(username);
//提示信息
var s_username = document.getElementById("s_username");
if (flag) {
//true
// s_username.innerHTML = "<span class='correct'></span>";
s_username.innerHTML = "<img src='img/ok_green.png' style='height: 25px;margin-right: 50px;'></img>";
} else {
s_username.innerHTML = "<img src='img/no.png' style='height: 25px;margin-right: 50px;'>账户错误</img>";
// s_password.innerHTML = "字母开头";
}
return flag;
}
//密码校验
function checkPassword() {
//获取值
var password = document.getElementById("password").value;
//定义正则
var reg_password = /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9]{8,10}$/;//强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在 8-10 之间)
//校验正则
var flag = reg_password.test(password);
//提示信息
var s_password = document.getElementById("s_password");
if (flag) {
//true
// s_username.innerHTML = "<span class='correct'></span>";
s_password.innerHTML = "<img src='img/ok_green.png' style='height: 25px;margin-right: 50px;'></img>";
} else {
s_password.innerHTML = "<img src='img/no.png' style='height: 25px;margin-right: 50px;'>密码错误</img>";
// s_password.innerHTML = "包含大小写字母和数字";
}
return flag;
}
//邮箱校验
function checkEamil() {
var email = document.getElementById("email").value;
var reg_email = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;//邮箱校验
var flag = reg_email.test(email);
var s_email = document.getElementById("s_email");
if (flag) {
s_email.innerHTML = "<img src='img/ok_green.png' style='height: 25px;margin-right: 50px;'></img>";
} else {
s_email.innerHTML = "<img src='img/no.png' style='height: 25px;margin-right: 50px;'>邮箱错误</img>";
}
return flag;
}
//姓名校验
function checkName() {
var name = document.getElementById("name").value;
var reg_name = /^[\u4e00-\u9fa5]{2,6}$/;//汉字
var flag = reg_name.test(name);
var s_name = document.getElementById("s_name");
if (flag) {
s_name.innerHTML = "<img src='img/ok_green.png' style='height: 25px;margin-right: 50px;'></img>";
} else {
s_name.innerHTML = "<img src='img/no.png' style='height: 25px;margin-right: 50px;'>姓名错误</img>";
}
return flag;
}
//手机号校验
function checkPhone() {
var phone = document.getElementById("phone").value;
var reg_phone = /^(13[0-9]|17[0-9]|14[5|7]|15[0|1|2|3|4|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$/;//手机号
var flag = reg_phone.test(phone);
var s_phone = document.getElementById("s_phone");
if (flag) {
s_phone.innerHTML = "<img src='img/ok_green.png' style='height: 25px;margin-right: 50px;'></img>";
} else {
s_phone.innerHTML = "<img src='img/no.png' style='height: 25px;margin-right: 50px;'>手机号错误</img>";
}
return flag;
}
//出生日期校验
function checkBirthday() {
var birthday = document.getElementById("birthday").value;
var reg_birthday = /^((?:19[2-9]\d{1})|(?:20(?:(?:0[0-9])|(?:1[0-8])|(?:2[0-8]))))\-((?:0?[1-9])|(?:1[0-2]))\-((?:0?[1-9])|(?:[1-2][0-9])|30|31)$/;// 更加高级的可以说根据时间变化 动态获取年满18岁的出生日期正则
//参考文章https://www.jb51.net/article/136913.htm
var flag = reg_birthday.test(birthday);
var s_birthday = document.getElementById("s_birthday");
if (flag) {
s_birthday.innerHTML = "<img src='img/ok_green.png' style='height: 25px;margin-right: 50px;'></img>";
} else {
s_birthday.innerHTML = "<img src='img/no.png' style='height: 25px;margin-right: 50px;'>出生日期错误</img>";
}
return flag;
}
//用户协议校验
var flag = false;
function img_static() {
var img = document.getElementById("img_static");
var xieyi = document.getElementById("xieyi");
if (flag){
img.src = "https://qq-web.cdn-go.cn/zc.qq.com/9315f3d4/v3/img/up.png";
xieyi.style.display = 'none';
flag = false;
}else{
img.src = "https://qq-web.cdn-go.cn/zc.qq.com/9315f3d4/v3/img/down.png";
xieyi.style.display = 'inline';
flag = true;
}
}
//多选框校验
function checkbox() {
var cb = document.getElementsByName("cb");
var length = cb.length;
// alert(length)
for (let i = 0; i < cb.length; i++) {
if (cb[i].checked == true){
alert("提交表单成功")
return true
}else{
alert("请先进行协议同意")
return false;
}
}
}
</script>
2.3、<HTML>部分
这部分就不贴出来了 自己在做的时候 很大程度的限制了 对于排版 界面的美观 换句话说 不够简洁 太low 所以 小伙伴们可以学习一下 css代码 script部分的代码也是 边学边用 所以很多地方都有写了详细注释 对于重复部分的可能没有注释就
三、不足 改进
1、不够简洁(整个页面看起来 很繁琐 没有QQ注册的那种简洁?)
2、用户体验感差(整个注册规则貌似只有自己知道 或者看注释才能知道 所以没有很好的将详细提示信息展示出来) 3、升级日期校验(日期框框的校验部分 还可以在高级一点 就是只允许年龄满18周岁的人注册)
4、验证码校验 (因为这个小案例中的验证码是图片插入形式 所以 很大程度上校验是不够完整或者说意义不太大 在后面改进的话 是通过MATH.Rondom()随机生成数字 然后在getelementById 就可以获取文本框中的值了)
|