liangjin
2021-04-09 71f4725b4532bc9f600a07d457c5482af1a12f4c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
/*
 * @Descripttion: 表单验证工具函数
 * @Author: TM丶
 * @LastEditors: 小明丶
 * @Date: 2019-04-01 19:54:53
 * @LastEditTime: 2020-11-09 14:26:43
 */
import IDValidator from './IDValidator';
 
let fns = {
    // 参数是否为真
    isEmpty(value) {
        return value !== "" && typeof value !== "undefined" && value !== null;
    },
    //密码验证
    isPassword(value) {
        // 验证密码格式
        return /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$/.test(value);
    },
    // 验证码验证
    isCode(value) {
        return /^\d{4}$/.test(value);
    },
    isEmail(value){
        return /[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?/.test(value);
    },
    // 验证电话
    isTel(value) {
        return /^1([358][0-9]|4[579]|66|7[0135678]|9[89])[0-9]{8}$/.test(value);
    },
    //验证身份证
    isIdCard(value){
        return /^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$|^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/.test(value)
    },
    // idCard check
    checkIDCard(idCard) {
        // 验证身份证格式
        return IDValidator.isValid(idCard);
    },
    //验证银行卡号
    isBankCode(iccid){
        let initCard = iccid,
            s1 = 0,
            s2 = 0;
        iccid = iccid.substring(0, iccid.length - 1);
        let reverse = '';
        for (let i = iccid.length; i > 0; i--) {
            reverse += iccid.charAt(i - 1);
        }
        for (let i = 0; i < reverse.length; i++) {
            let digit = parseInt(reverse.charAt(i), 10);
            if (i % 2 != 0) {
                s1 += digit;
            } else {
                s2 += 2 * digit;
                if (digit >= 5) {
                    s2 -= 9;
                }
            }
        }
        let sum = 10 - ((s1 + s2) % 10);
        if (sum === 10) {
            sum = 0;
        }
        return iccid + sum == initCard;
    }
};
 
let Validator = function (form, rules) {
    return {
        // rule demo
        //rules:>>> [{key:"formkey",message:"",type:"isEmpty",rule:/\d/}]
        check(callback) {
            if (!Array.isArray(rules) && rules.length === 0) throw "rules must be instance of Array";
            let len = rules.length;
            for (let index = 0; index < len; index++) {
                const ruleItem = rules[index];
                let fnName = fns[ruleItem.type];
                if (fnName && !fnName(form[ruleItem.key])) {
                    callback(ruleItem);
                    return false;
                }
                // 如果有自定义验证规则
                let rule = ruleItem.rule;
                if(typeof rule !=='undefined' && !rule.test(form[ruleItem.key])){
                    callback(ruleItem);
                    return false;
                }
            }
            return true;
        }
    }
};
 
 
// export default Validator;
export default {
    install(Vue,opt){
        Vue.prototype.$validator = Validator;
    }
}