手写一个jquery微量级验证插件

925 阅读1分钟

需求

基于jquery开发一个微量级验证插件,为表单验证提供功能,
1、可以让用户去配置选项,拥有定制validate插件的能力,如$('form').validate({defaultEvent:'change');
2、至少包含四种表单验证方式(身份证号码验证、手机号码、电子邮箱验证、必填字段验证、最大值/最小值验证)

编码

效果图

新建一个jquery.validate.js

(function(root,pluginName){
    //校验规则,微引擎
    var RULES = {
        idcard: function () {
            var inputVal = this.val();
            var regex = /^[1-9]\d{5}(18|19|20|(3\d))\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/;
            return regex.test(inputVal);
        },
        tel: function () {
            var inputVal = this.val();
            var regex = /1\d{10}/;
            return regex.test(inputVal);
        },
        email: function () {
            var inputVal = this.val();
            var regex = /\w+@\w+\.\w+/;
            return regex.test(inputVal);
        },
    };
    $.fn[pluginName] = function(options){
        if(!this.is('form')){
            return;
        }
        var defaultOptions = {
            triggerEvent:'change',
            sign:'dv',
            error:'输入不合法,请检查输入数据'
        };
        $.extend(defaultOptions,options);
        var inputEls = this.find('input');        
        inputEls.on(defaultOptions.triggerEvent,function(event){
            var value = this.value;
            var $ele = $(this);
            $ele.next('span').remove();
            $.each(RULES,function(key,func){
                var value = $ele.data(defaultOptions.sign+'-'+key);
                if(value){
                    var result = func.call($ele);
                    if(!result){
                        var errorMsg = $ele.data(defaultOptions.sign + '-' + key + "-error") || defaultOptions.error;
                        $ele.after('<span style="color:red;">'+errorMsg+'</span>');
                    }
                }
            });
            console.log(value);
        });
    };
    $.fn[pluginName]['expand'] = function(options){
        $.extend(RULES,options);
    }
})(this,'validate');

新建一个表单页面测试,validate.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <link rel="stylesheet" href="../css/bootstrap.min.css">
</head>
<body>
    <form>              
        <div class="form-group">
            <label for="idCard">身份证号码</label>
            <input type="text" class="form-control" id="idCard" placeholder="Enter ID Card" data-dv-idcard=true data-dv-email-error="请输入合法的邮箱信息">
        </div>
        <div class="form-group">
            <label for="tel">手机号码</label>
            <input type="text" class="form-control" id="tel" placeholder="Enter Tel" data-dv-tel=true>
        </div>
        <div class="form-group">
            <label for="email">电子邮箱</label>
            <input type="email" class="form-control" id="email" placeholder="Enter email" data-dv-email=true>           
        </div> 
        <button type="submit" class="btn btn-primary">Submit</button>
    </form>
    <script src="../jquery-3.4.0.js"></script>
    <script src="jquery.validate.js"></script>
    <script>
        $('form').validate({        
        });
        /**弹性扩展**/
        $.fn.validate.expand({
            password:function(){
                var regex = /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,20}$/;
                var val = $(this).val();
                return regex.test(val);
            }
        });
    </script>
</body>
</html>