- 用户名以数字或字母开头, 6~11 位;
- 密码6~12位数字字母下划线;
- 手机号11位数字
- input框的失焦事件
- input输入的内容
- 判断输入的内容, 是否符合要求,不符合, 警告文本提示
4.1 代码的实现
// 获取标签对象const oIptName = document.querySelector('.name'); //用户名const oIptPwd = document.querySelector('.pwd'); //密码const oIptNum = document.querySelector('.num'); //号码// 给用户名添加失焦事件oIptName.addEventListener('blur', function(e){// 拿到用户输入的用户名let value = e.target.value;// 定义正则表达式 以数字或字母开头、6~11 位;let reg = /^[0-9A-Za-z]{6,11}$/;// 根据正则表达式判断if(reg.test(value)){e.target.nextElementSibling.style.display = 'none';}else{e.target.nextElementSibling.style.display = 'block';}})oIptPwd.addEventListener('blur', function(e){// 拿到用户输入的密码let value = e.target.value;// 定义正则表达式 6~12位数字字母下划线;let reg = /^\w{6,12}$/;// 根据正则表达式判断if(reg.test(value)){e.target.nextElementSibling.style.display = 'none';}else{e.target.nextElementSibling.style.display = 'block';}})oIptNum.addEventListener('blur', function(e){// 拿到用户输入的手机号let value = e.target.value;// 定义正则表达式 11位数字;let reg = /^\d{11}$/;// 根据正则表达式判断if(reg.test(value)){e.target.nextElementSibling.style.display = 'none';}else{e.target.nextElementSibling.style.display = 'block';}})
4.2 代码优化
// 获取标签对象const oIpt = [...document.querySelectorAll('input')];// 创建正则表达式 以对象形式const reg = {name: /^[0-9A-Za-z]{6,11}$/,pwd: /^\w{6,12}$/,num: /^\d{11}$/}// 循坏遍历oIpt.forEach(function(item){// 给对象添加失焦事件item.addEventListener('blur', function(){// 获取用户终正在输入的数值let value = this.value;// 获取正则let fnReg = reg[this.className];// 根据正则去判断if (fnReg.test(value)) {// 字符串符合条件this.nextElementSibling.style.display = 'none'} else {// 字符串不符合条件this.nextElementSibling.style.display = 'block'}})})
密码包含数字-字母-符号(!@#)
- 包含一种~弱;
- 包含两种~中;
- 包含三种~强
判断密码符合这三种格式的那些
- 拿到密码
- 判断正则符合三个强度的那些
- 根据强度让对应的span高亮
// 获取标签对象const oIpt = document.querySelector('input');const oSpans = [...document.querySelectorAll('span')];// 给密码框添加输入事件oIpt.oninput = function () {// 获取输入框的valueconst value = this.value;// 定义正则表达式 判断密码强度const l1 = /\d/;const l2 = /[a-zA-Z]/;const l3 = /[!@#]/;//通过正则判断当前密码强度// 定义变量 用于存储密码强度的等级,默认为0级let level = 0; if (l1.test(value)) { level++ };if (l2.test(value)) { level++ };if (l3.test(value)) { level++ };/*** 根据密码强度决定那些span高亮* * level == 3 oSpans[0][1][2] 高亮显示* level == 2 oSpans[0][1] 高亮显示* level == 1 oSpans[0] 高亮显示*/// 通过循坏判断密码强度的等级for (let i = 0; i < oSpans.length; i++) {oSpans[i].className = ''if (i < level) {oSpans[i].className = 'active'}}}
- @前面只能包含数字字母下划线,
- @前只能出现6~10位, 不能以下划线开头;
- 邮箱类型只接受163与qq; 后缀只接受com与cn
//定义正则表达式 const reg = /^[0-9A-Za-z]\w{5,9}@(163|qq)\.(com|cn)$/; //定义邮箱 进行验证const str1 = 'Wangyi@163.com';const str2 = 'Wangyi@qq.com';const str3 = 'Wangyi@163.cn';const str4 = 'Wangyi@qq.cn';console.log(reg.test(str1));console.log(reg.test(str2));console.log(reg.test(str3));console.log(reg.test(str4));
/*** 0~9 \d |* 10~99 \d{2} -> ([1-9]\d) |* 100~199 1\d{2} |* 200~249 2[0-4]\d |* 250~255 25[0-5]*/
const reg = /^(\d|([1-9]\d)|1\d{2}|2[0-4]\d|25[0-5])$/;console.log(reg.test('0'));console.log(reg.test('10'));console.log(reg.test('100'));console.log(reg.test('200'));console.log(reg.test('255'));console.log(reg.test('12345'));