js-最常用的js表单校验1

最近写了无数各种形式的表单,记录下奇奇怪怪的校验规则~

一:首先是element自带的rules校验规则:

element作为常用框架,自带rules属性简单易懂,官方文档一目了然,不再赘述,应付常用校验足够了,

相对麻烦的是自定义的校验函数,举个例子:

html部分:

<el-form id="form"
                   :rules="rules"
                   :inline="true"
                   :model="form"
                   size="medium"
                   ref="form"
                   label-position="right"
                   label-width="136px"
                   validate-on-rule-change
                   class="postForm" autocomplete="off" inline-message>
      <el-form-item prop="phone">
             <el-input v-model="form.phone" name="phone" id="phone" size="medium" required>
              </el-input>
     </el-form-item>
   <el-form-item prop="money">
             <el-input v-model="form.money" name="money" id="money" size="medium" required>
              </el-input>
     </el-form-item>
 </el-form>

下面是js部分:

rules:{
    phone: [
    	{ required: true, message: '请输入手机号码', trigger: 'blur' },
		{ validator:function(rule,value,callback){
			if(/^1[34578]\d{9}$/.test(value) == false&&/^\d{4}-?\d{4}$/.test(value) == false){
				callback(new Error("请输入正确的手机号或电话号码"));
			}else{
				callback();
			}
		}, trigger: 'blur'
	}],
  money: [
  	{required: true, message: '请输入金额', trigger: 'change'},
  	{ validator:function(rule,value,callback){
  		let num=Number(me.numRep)+Number(me.meetingForm.numWork)
  		if(/^\d+(\.\d{1,6})?$/.test(value) == false){
  			callback(new Error("最长可输入6位小数点,系统限制最大不能超过 550*总人数/10000"));
			}else if(Number(value) >num*550/10000){
				callback(new Error("最长可输入6位小数点,系统限制最大不能超过 550*总人数/10000"));
			}else{
				callback();
			}
		}, trigger: 'blur'
	}]
}
formValidate(formName){
	this.$refs[formName].validate((valid) => {
		if(valid) {
			this.validateForm=true;
		}else{
			this.$message.warning("请确认输入信息无误!");
			this.validateForm=false;
		}
	});
	return this.validateForm;
},

二:接下来也是比较常用的,jQuery+easyUI 的表单校验:

依旧直接上例子:

html部分:

<form id="formA" class="postForm" autocomplete="off">
                <table role="table" class="desigerTable" data-usage="基本信息录入" id="t5" cellpadding="10" cellspacing="10">
                    <tbody>
                      <tr>
                          <td class="targetarea droppable">
                              <div data-type="1">
                                  <div class="form-group">
                                      <label class="col-sm-4 control-label">总天数</label>
                                  </div>
                              </div>
                          </td>
                          <td class="targetarea droppable">
                              <div data-type="1" class="wrapper">
                                  <div class="form-group">
                                      <input class="form-control" placeholder="" id="days"
                                                                 name="days" type="text">
                                  </div>
                              </div>
                          </td>
                          <td class="targetarea droppable">
                              <div data-type="1">
                                  <div class="form-group">
                                      <label class="col-sm-4 control-label">总人数</label>
                                  </div>
                              </div>
                          </td>
                          <td class="targetarea droppable" colspan="2">
                              <div data-type="1" class="wrapper">
                                  <div class="form-group">
                                      <input class="form-control" placeholder="" id="person"
                                                                 name="person" type="text">
                                  </div>
                              </div>
                          </td>
                      </tr>
              </tbody>
          </table>
</form>
/**
     * 校验主表单
     */
    var formValidate = function () {
        //表单验证规则
        $("#formA").validate({
            ignore: "",
            rules: {
                days: {required: false,number: true,checkDur:true},
                person: {required: false,number: true,checkPerson:true},
            },
            messages: {
                days: {
                    number: "请输入数字",
                    checkDays:"*总天数不超过2天,可输入小数,0.5,1,1.5!"
                },
                person: {
                    number: "请输入数字",
                    checkPerson:"*请输入正整数!"
                },
            },
            //是否在获取焦点时验证
            onfocusout:false,
            //是否在敲击键盘时验证
            onkeyup:false,
            //提交表单后,(第一个)未通过验证的表单获得焦点
            focusInvalid:true,
            //当未通过验证的元素获得焦点时,移除错误提示
            focusCleanup:true,
        });
        $.validator.addMethod("checkDays",function(value,element){
            if(value == 0.5||value == 1||value == 1.5||value == 2){
                return this.optional(element)||true
            }
        },"*总天数不超过2天,可输入小数,0.5,1.5!");
        $.validator.addMethod("checkPerson",function(value,element){
            var me = /(^[1-9]\d*$)/;
            return this.optional(element)||(me.test(value));
        },"*请输入正整数!");
    /**
     * 校验方法调用
     */
    var dataValidate = function (data) {
        if (!$("#formA").valid()) {
            Util.alert("请输入正确的数据!");
            return false;
        }
        return data;
    };

三:原生js form表单校验:

原生js校验可直接调用onclick,onfocus,onblur,onkeyup等事件来实现

(ps:原生真的永远的神,没有什么是原生js做不到的,如果做不到,就是我太菜了,继续滚去学原生。。)

继续简单明了举例子:

html部分:

<form action="example.html" method="post" enctype="multipart/form-data" class="register">
    <div>
        <label for="idCode">身份证号</label>
        <input type="text" id="idCode" class="idCode"     name="idCode" placeholder="身份证号"/>
    </div>
    <div>
        <label for="passwd">密码</label>
        <input type="passwd" name="passwd" id="passwd" class="passwd" placeholder="密码"/>
    </div>
</form>
onload = function () {
      blurElement();
      submitForm();
  }
  //元素失去焦点时校验
    function blurElement() {
        //验证姓名
        document.getElementById("ame").onblur = function () {
        vailidateName();
    };

    //表单提交函数
    function submitForm() {
        let form = document.getElementsByClassName("register")[0];
        form.onsubmit = function (e) {
        let flag =vailidateName()& vailidatePasswd()& vailidateID();
        return flag == 1 ? true : false;
        };
    }
    //验证身份证号码 18位
    function vailidateID() {
        let id = document.getElementById("idCode");
        let span = next(id);
        let value = id.value;
        //判断空
        if (value == "") {
            span.innerHTML = "身份证号码不能为空";
            span.style.color = "red";
            return false;
        }
        //判断长度
        if (value.length != 18) {
            span.innerHTML = "身份证号码长度18位";
            span.style.color = "red";
            return false;
        }
        //判断前17位数字
        let reg = /^\d{17}$/;
        let str = value.substring(0, 17);
        if (!reg.test(str)) {
            span.innerHTML = "身份证号码前17位必须是数字";
            span.style.color = "red";
            return false;
        }
        //验证密码:6-12位非空,必须包含大写字符,字母开头
        function vailidatePasswd() {
            let passwd = document.getElementById("passwd");
            let span = next(passwd);
            let value = passwd.value;
            let code = /^[a-zA-Z]$/;
        //非空
        if (value == "") {
            span.innerHTML = "密码不能为空";
            span.style.color = "red";
            return false;
        }
  }

ok,结束,以上就是最近写的典型的前端校验表单例子,还在跟需求battle新的校验。。下一篇是更让人吐血的动态校验。。。
博客

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值