1.需求
- 用户名以数字或字母开头, 6~11位
- 密码 6~12 位数字字母下划线
- 手机号 11 位数字
2.逻辑
- 首先获取到 用户名 密码 手机号
- 然后根据正则匹配输入的值是否符合规则来决定是否渲染对应的 span 标签
3.代码
//html和 css代码
<form>
<label>
用户名: <input autocomplete="off" type="text" class="name">
<span class="err">请按照规则填写用户名</span>
</label>
<label>
密码: <input autocomplete="off" type="text" class="password">
<span class="err1">请按照规则填写密码</span>
</label>
<label>
手机号: <input autocomplete="off" type="text" class="phone">
<span class="err2">请按照规则填写手机号</span>
</label>
<button>注册</button>
</form>
<style>
* {
margin: 0;
padding: 0;
}
form {
width: 500px;
padding: 30px;
border: 5px solid pink;
border-radius: 15px;
margin: 50px auto;
display: flex;
flex-direction: column;
}
form>label {
height: 50px;
position: relative;
}
form>label>span {
color: red;
position: absolute;
left: 20px;
bottom: 5px;
display: none;
}
</style>
- 普通版本
let inps = [...document.querySelectorAll('input')]
inps[0].onblur = function(e){
let value = e.target.value
let reg = /^[0-9a-zA-Z]\w{5,10}$/
if(reg.test(value)){
e.target.nextElementSibling.style.display = 'none'
}else{
e.target.nextElementSibling.style.display = 'block'
}
}
inps[1].onblur = function(e){
let value = e.target.value
let reg = /^\w{6,12}$/
if(reg.test(value)){
e.target.nextElementSibling.style.display = 'none'
}else{
e.target.nextElementSibling.style.display = 'block'
}
}
inps[2].onblur = function(e){
let value = e.target.value
let reg = /^\d{11}$/
if(reg.test(value)){
e.target.nextElementSibling.style.display = 'none'
}else{
e.target.nextElementSibling.style.display = 'block'
}
}
- 简化版本
let reg = {
name:/^[0-9a-zA-Z]\w{5,10}$/,
password:/^\w{6,12}$/,
phone:/^\d{11}$/
}
inps.forEach((item)=>{
item.onblur = function(){
let value = this.value
let fnReg = reg[item.className]
if(fnReg.test(value)){
this.nextElementSibling.style.display = 'none'
}else{
this.nextElementSibling.style.display = 'block'
}
}
})