校验配置

159 阅读1分钟

1.校验类

class Validation {
	// 校验范围限制
    static range = {
     	Frequency: [48000, 999000],
        RFLevel: [0, 108],
        SymbolRate: [0, 999000],
        Volume: [0, 100],
        AudioDelay: [-2000, 2000],
        VideoRate: [600, 20000],
        GOPSize: [1, 61],
        PID: [32, 8191],
        UsefulPID: [32, 8190],
        OtherPID: [0, 8191],
        OrgNetID: [0, 65535],
        TSID: [0, 65535],
        ServiceID: [0, 65535],
        IPPort: [0, 65535],
        TTL: [1, 255],
        IPRate: [0, 500],
        VLAN: [1, 4094],
        IGMPInterval: [30, 255],
        FECL: [1, 20],
        FECD: [4, 20],
        Brightness: [0, 255],
        Contrast: [0, 255],
        Saturation: [0, 255],
        Chrominance: [-180, 180],
        ServiceName: [1, 31],
        ProviderName: [1, 31],
        OSDX: [0, 1920],
        OSDY: [0, 1080],
        OSDW: [2, 1920],//width
        OSDH: [2, 1080],//height
        shelterX: [0, 1920],
        shelterY: [0, 1080],
        shelterW: [2, 1920],//width
        shelterH: [2, 1080],//height
        syncFrequency: [1, 200],
    }
    
    //配置指定参数的范围
    setRange = (name, min, max) => {
    	Validation[name][0] = min
        Validation[name][1] = max
    }
    
    // 校验范围
    static checkRange = (name, value) => {
        let o = Validation.range[name];
        return value >= o[0] && value <= o[1];
    };
    
     //获取字节长度
    static getByteLen = (val) => {
        let len = 0;
        for (let i = 0; i < val.length; i++) {
            if (val[i].match(/[^\x00-\xff]/ig) != null) { //全角
                len += 2;
            } else {
                len += 1;
            }
        }
        return len;
    };
    
     //MAC地址
    static isMAC = (value) => {
        let reg_name = /^[A-F0-9]{2}(:[A-F0-9]{2}){5}$/;
        return reg_name.test(value);
    };
    
     //IP地址
    static isIP = (strIP) => {
        if (typeof strIP === "undefined") {
            return false;
        }
        let strip = strIP + '';
        let reSpaceCheck = /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/;
        let str = strip.replace(/^\s+|\s+$/g, '');
        if (reSpaceCheck.test(str)) {
            str.match(reSpaceCheck);
            return (RegExp.$1 <= 255 && RegExp.$2 <= 255 && RegExp.$1 >= 0 && RegExp.$2 >= 0 && RegExp.$3 <= 255 && RegExp.$3 >= 0 && RegExp.$4 <= 255 && RegExp.$4 >= 0);
        } else {
            return false;
        }
    };
    
    /**
     * [isEqualIPAddress 判断两个IP地址是否在同一个网段]
     * @param  {[String]}  addr1 [地址一]
     * @param  {[String]}  addr2 [地址二]
     * @param  {[String]}  mask  [子网掩码]
     * @return {Boolean}         [true or false]
     */
    static isEqualIPAddress = (addr1, addr2, mask) => {
        if (!addr1 || !addr2 || !mask) {
            console.log("各参数不能为空");
            return false;
        }
        let res1 = [], res2 = [];
        let arr1 = addr1["split"](".");
        let arr2 = addr2["split"](".");
        let maskArr = mask["split"](".");

        for (let i = 0, len = arr1.length; i < len; i += 1) {
            res1.push(parseInt(arr1[i]) & parseInt(maskArr[i]));
            res2.push(parseInt(arr2[i]) & parseInt(maskArr[i]));
        }

        if (res1.join(".") === res2.join(".")) {
            console.log("在同一个网段");
            return true;
        } else {
            console.log("不在同一个网段");
            return false;
        }
    };

    
     //整数
    static isInteger = (value) => {
        if (typeof value === "undefined") {
            return false;
        }
        let strNum = value + '';
        let reSpaceCheck = /^-*\d+$/;
        let str = strNum.replace(/^\s+|\s+$/g, '');
        return reSpaceCheck.test(str);
    };
    //浮点型
    static isFloatNumber = (strNumber) => {
        if (typeof strNumber === "undefined") {
            return false;
        }
        let strNum = strNumber + '';
        let reSpaceCheck = /^-*\d+(\.\d+)?$/;
        let str = strNum.replace(/^\s+|\s+$/g, '');
        return reSpaceCheck.test(str);
    };
    
    // FTPIP或域名验证 (例:192.168.142.22:8000或者baidu.com:8000,可以不带端口)
    static isFTPServer(strName) {
        let regNumPointCheck = /(^[0-9.:]+$)/
        if (regNumPointCheck.test(strName)) { //ip校验
            let midIndex = strName.indexOf(':')
            if (midIndex !== -1) {
                let ip = strName.slice(0,midIndex)
                let port = strName.slice(midIndex+1)
                return Validation.isIP(ip) && Validation.isIPPort(port)
            } else {
                return Validation.isIP(strName)
            }
        } else {//域名校验
            let regDomainCheck = /^(?=^.{3,255}$)[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+$/
            let midIndex = strName.indexOf(':')
            if (midIndex !== -1) {
                let domain = strName.slice(0,midIndex)
                let port = strName.slice(midIndex+1)
                return regDomainCheck.test(domain)  && Validation.isIPPort(port)
            } else {
                return  regDomainCheck.test(strName)
            }
        }
    };
    
    //FTP文件上传路径校验(如:192.168.142.22:8000/upload/ftpfile或者只有/upload/ftpfile)
    static isFTPUploadPath(FTPUploadPath) {
        let regPathCheck = /^(([A-Za-z]{1}:){0,1}\/.*)?$/ //允许特殊字符通过
        if (FTPUploadPath === '') return false
        //
        if (FTPUploadPath.indexOf('/') === 0) {
            return regPathCheck.test(FTPUploadPath)
        } else {
            //拆分出来校验
            let midIndex = FTPUploadPath.indexOf('/')
            let ip = FTPUploadPath.slice(0,midIndex)
            let path = FTPUploadPath.slice(midIndex)
            return   Validation.isFTPServer(ip) &&  regPathCheck.test(path)
        }

    };
}

export default Validation