用正则表达式写出表单验证

表单验证

  • 用户名:长度4~12,英文大小写字母。正则:/^[a-zA-Z]{4,12}$/。

  • 密码:长度6~20,大小写字母、数字或下划线。正则:/^\w{6,20}$/。

  • 确认密码:要求与密码框一样,且两次输入相同。正则:RegExp(‘^’ + 密码框的值 + '$')

  • 手机号码:13、14、15、17、18开头的11位手机号。正则:/^1[34578]\d{9}$/。

  • 邮箱:用户名 @ 域名(域名后缀至少2个字符)。正则:/^(\w+(_|-|.)*)+@(\w+(-)?)+(.\w{2,})+$/。

  • 编写用户注册表单,包含用户名、密码、确认密码、手机号以及电子邮箱。

  • 表单项添加失去焦点处理,事件处理函数为 inputBlur()。

  • 编辑 inputBlur() 函数,获取表单 name、value 及提示信息后,去除空白后,若内容为空调用 error() 给出提示,否则进行验证。

  • 编写 error() 函数完成错误提示

  • 编写 getRegMsg() 函数获取验证的正则及提示信息。

  • 根据正则验证 value 值,成功调用 success() 给出通过的提示。

  • 编写 success() 函数完成错误及成功的提示。

CSS页面代码:

  <style>
    *{
      margin: 0;
      padding: 0;
      box-sizing: border-box;
    }
    .box{
      width: 600px;
      margin: 100px auto;
      padding: 20px 30px;
      background-color: #f0f0f0;
      box-shadow:0 0 10px rgba(0, 0, 0, 0.3) ;
      border-radius: 10px;
    }
    .box-title{
      margin-bottom: 20px;
      text-align: center;
    }
    .box-content form{
      display: flex;
      flex-direction: column;
    }
    .box-content .label{
      display: flex;
      flex-direction: column;
      margin-bottom: 10px;
    }
    .box-content .label-item{
      display: flex;
    }
    .box-content .label-title{
      width: 80px;
      flex-shrink: 0;
      font-style: 14px;
      line-height: 40px;
      text-align-last: justify;
    }
    .box-content .label-control {
      margin-left: 20px;
      flex: 1;
    }
    .box-content .label-control input {
      display: block;
      width: 100%;
      padding: 0 20px;
      height: 40px;
      font-size: 14px;
      border: 1px solid #eee;
      outline: none;
      line-height: 40px;
      border-radius: 5px;
    }
    .box-content .label-control input:focus {
      border-color: #0049f3;
    }

    .box-content .label-control input.red {
     border-color: #f30004;
    }
    .box-content .label-hint {
      display: none;
      margin-top: 10px;
      font-size: 12px;
      color: #999;
      text-align: right;
    }
    .box-content .label-hint.show {
      display: block;
    }
    .box-content .label-item.btns{
      flex-direction: column;
    }
    .box-content .label-item .btn{
      height: 40px;
      line-height: 40px;
      font-size: 16px;
      /* border-radius: 5px; */
      cursor: pointer;
      outline: none;
    }
    .box-content .label-item .btn-submit{
      margin-bottom: 10px;
      border-radius: 5px;
      background-color: rgb(0, 13, 255);
      border-color: transparent;
    }
  </style>

 HTML页面代码:

<div class="box">
  <h2 class="box-title">注册页面</h2>
  <div class="box-content">
    <form action="#" method="post" id="register">
      <div class="label">
        <div class="label-item">
          <div class="label-title">用户名:</div>
          <div class="label-control">
            <input type="text"name="username" placeholder="请输入用户名的长度为4~12,英文大小写字母">
          </div>
        </div>
        <div class="label-hint"></div>
      </div>
      <div class="label">
        <div class="label-item">
          <div class="label-title">密码:</div>
          <div class="label-control">
            <input type="password" name="userpass" placeholder="请输入密码的长度6~20,大小写字母、数字或下划线">
          </div>
        </div>
        <div class="label-hint"></div>
      </div>
      <div class="label">
        <div class="label-item">
          <div class="label-title">确认密码:</div>
          <div class="label-control">
            <input type="password" name="userpass_confirm" placeholder="请再次输入密码">
          </div>
        </div>
        <div class="label-hint"></div>
      </div>
      <div class="label">
        <div class="label-item">
          <div class="label-title">手机号码:</div>
          <div class="label-control">
            <input type="text" name="usertel" placeholder="请输入手机号码为13、14、15、17、18开头的11位手机号">
          </div>
        </div>
        <div class="label-hint"></div>
      </div>
      <div class="label">
        <div class="label-item">
          <div class="label-title">邮箱:</div>
          <div class="label-control">
            <input type="email" name="useremail" placeholder="请输入邮箱为用户名 @ 域名(域名后缀至少2个字符)">
          </div>
        </div>
        <div class="label-hint"></div>
      </div>
      <div class="label">
        <div class="label-item btns">
          <button class="btn btn-submit"type="submit">提交</button>
          <button class="btn btn-reset"type="reset">重置</button>
        </div>
      </div>
    </form>
  </div>
</div>

JS页面代码:

<script>
   // 获取每个输入框
  let _register=document.getElementById('register');
   // 给每一个输入框添加一个丢失焦点事件的监听
  let _inputs=_register.getElementsByTagName('input');
  for(let i in _inputs){
    _inputs[i].onblur=inputBlur;
  }
  _register.onsubmit=checkForm;
  function checkForm(){
    if(!formCheck(_inputs[0])||!formCheck(_inputs[1]) || !formCheck(_inputs[2]) || !formCheck(_inputs[3]) || !formCheck(_inputs[4])){
      return false;
    }
    return true;
  }
  _register.onreset=function(){
    for(let i in _inputs){
      _inputs[i].classList.remove('red');
      let _hit=_inputs[i].parentNode.parentNode.nextSibling;
      _hit.classList.remove('show');
      _hit.innerHTML='';
    }
  }
  function inputBlur(){
    let _name = this.name;
    let _val = this.value;
    let _reg = '';
    let _msg = this.placeholder;
    let _hit = this.parentNode.parentNode.nextElementSibling;
    // trim 去除字符串两侧空白内容
    _val = _val.trim();
    _reg = getReg(_name);
    if (!_reg.test(_val)) {n 
      this.classList.add('red');
      _hit.innerHTML = _msg;
      _hit.classList.add('show');
      return false;
    } else {
      this.classList.remove('red');
      _hit.classList.remove('show');
      _hit.innerHTML = '';
      return true;
      }    
    }
    function getReg(name){
      let _reg='';
      switch(name){
        case 'username':
          _reg=/^[a-zA-Z]{4,12}$/;
          break;
          case 'userpass':
            _reg=/^\w{6,20}$/;
            break;
            case 'userpass_confirm':
              let _userpass_val=_inputs[1].value;
              _reg=RegExp('^' + _userpass_val + '$');
              break;
              case 'usertel':
                _reg = /^1[34578]\d{9}$/;
                break;
                case 'useremail':
                _reg = /^(\w+(\_|\-|\.)*)+@(\w+(\-)?)+(\.\w{2,})+$/;
                break;
      }
      return _reg;
    }
</script>

运行结果如图:

 

  • 3
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值