jbd
Version:
jBD Framework's Core
271 lines (241 loc) • 6.62 kB
JavaScript
/**
* ==========================================
* Name: Check
* Author: Buddy-Deus
* CreTime: 2014-11-20
* Description: 内容校验
* Log
* 2015-06-08 优化模块结构
* ==========================================
*/
jBD.define(function (module, exports, require) {
"use strict";
let api;
/**
* 泛式校验
*
* @namespace Check
*/
api = {
/**
* 泛式校验
*
* @public
* @param {string|jquery} obj
* @param {string|regexp} rxp 正则字符串
* @param {string} def 默认匹配值
* @returns {boolean}
*/
Check: (obj, rxp, def) => {
let val = obj,
jq = jBD.isjQuery(obj);
if (!jBD.isString(def)) def = "^\\S{0,}$";
if (jq) {
rxp = typeof(obj.attr("chk")) != "undefined" ? obj.attr("chk") : rxp;
val = obj.val();
}
if (val) {
switch (jBD.type(rxp, true)) {
case "regexp":
break;
case "string":
if (rxp.length >= 2) {
rxp = new RegExp(rxp, "i");
break;
}
default:
rxp = new RegExp(def, "i");
break;
}
if (rxp.test(val)) return true;
if (jq) obj.focus();
}
return false;
},
/**
* Input校验
*
* @public
* @param {string} obj
* @param {number} [min=0] 最小值
* @param {number} [max=1024] 最大值
* @returns {boolean}
*/
Input: (obj, min, max) => {
if (!jBD.isNumber(min) || min < 0) min = 0;
if (!jBD.isNumber(max) || max <= min) max = 1024;
return api.Check(obj, "^\\S{" + min + "," + max + "}$");
},
/**
* 宽泛内容校验
*
* @public
* @param {string|jquery} obj
* @param {number} [min=0] 最小值
* @param {number} [max=1024] 最大值
* @returns {boolean}
*/
Info: (obj, min, max) => {
if (!jBD.isNumber(min) || min < 0) min = 0;
if (!jBD.isNumber(max) || max <= min) max = 1024;
return api.Check(obj, "^[\\S\\s]{" + min + "," + max + "}$");
},
/**
* Select校验
*
* @public
* @param {jquery} obj
* @param {string|regexp} rxp 正则字符串
* @returns {boolean}
*/
Select: (obj, rxp) => api.Check(obj, rxp, "\\S{1,}"),
/**
* CheckBox校验
*
* @public
* @param {jquery} obj
* @param {string|regexp} rxp 正则字符串
* @returns {boolean}
*/
CheckBox: (obj, rxp) => api.Check(obj, rxp, "\\S{1,}"),
/**
* 账号校验
*
* @public
* @param {string} obj
* @param {number} [min=6] 最小值
* @param {number} [max=32] 最大值
* @returns {boolean}
*/
UID: (obj, min, max) => {
if (!jBD.isNumber(min) || min < 0) min = 6;
if (!jBD.isNumber(max) || max <= min) max = 32;
return api.Check(obj, "^[a-z]{1}[a-z0-9_]{" + (min - 1) + "," + (max - 1) + "}$");
},
/**
* 密码校验
*
* @public
* @param {string} obj
* @param {number} [min=6] 最小值
* @param {number} [max=32] 最大值
* @returns {boolean}
*/
PWD: (obj, min, max) => {
if (!jBD.isNumber(min) || min < 0) min = 6;
if (!jBD.isNumber(max) || max <= min) max = 32;
return api.Check(obj, "^[a-z0-9~!@#$%^&*-_=\+]{" + min + "," + max + "}$");
},
/**
* 邮箱校验
*
* @public
* @param {string} obj
* @returns {boolean}
*/
Mail: obj => api.Check(obj, "^[a-z0-9]{1}[\\w-]*(\\.[a-z0-9]{1}[\\w-]*)*@[a-z0-9]{1}[\\w-]*(\\.[a-z0-9]{1}[\\w-]*)*\\.[a-z0-9]+$"),
/**
* GPS校验
*
* @public
* @param {string} obj
* @returns {boolean}
*/
GPS: obj => api.Check(obj, "^([0-9]{1,})(([/\\s:-][0-9]{1,}){2})$"),
/**
* IP校验
*
* @public
* @param {string} obj
* @returns {boolean}
*/
IP: obj => api.Check(obj, "^((1?\\d?\\d|(2([0-4]\\d|5[0-5])))\\.){3}(1?\\d?\\d|(2([0-4]\\d|5[0-5])))$"),
/**
* MAC校验
*
* @public
* @param {string} obj
* @returns {boolean}
*/
MAC: obj => api.Check(obj, "^([0-9a-f]{2})(([/\\s:-][0-9a-f]{2}){5})$"),
/**
* 手机校验
*
* @public
* @param {string} obj
* @returns {boolean}
*/
Mobile: obj => api.Check(obj, "^(1\\d)[\\d]{9}$"),
/**
* 昵称码校验
* 中文占2个字符
*
* @public
* @param {string} obj
* @param {number} [min=2] 最小值
* @param {number} [max=6] 最大值
* @param {boolean} [all=true] 是否允许全部内容
* @returns {boolean}
*/
Name: (obj, min, max, all) => {
if (!jBD.isNumber(min) || min < 0) min = 2;
if (!jBD.isNumber(max) || max <= min) max = 6;
all = all !== false ? "^[a-z\u2E80-\u9FFF]{1}([a-z0-9\u2E80-\u9FFF]|[_])" : "^[\u2E80-\u9FFF]{1}([0-9\u2E80-\u9FFF])";
all += "{" + (min - 1) + "," + (max - 1) + "}$";
if (!api.Check(obj, all)) return false;
if (jBD.isjQuery(obj)) obj = obj.val();
all = obj.match(/[^ -~]/g);
obj = (all ? all.length : 0) + obj.length;
return obj <= max;
},
/**
* 身份证校验
*
* @public
* @param {string} obj
* @returns {boolean}
*/
CID: obj => {
let val = obj,
jq = jBD.isjQuery(obj);
const wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1],
vc = ["1", "0", "x", "9", "8", "7", "6", "5", "4", "3", "2"],
chkBirthday = value => {
let year, month, day;
switch (value.length) {
case 15:
year = parseInt("19" + value.substring(6, 8));
month = parseInt(value.substring(8, 10)) - 1;
day = parseInt(value.substring(10, 12));
break;
case 18:
year = parseInt(value.substring(6, 10));
month = parseInt(value.substring(10, 12)) - 1;
day = parseInt(value.substring(12, 14));
break;
default:
return false;
}
let dt = new Date(year, month, day);
if (dt.getFullYear() != year || dt.getMonth() != month || dt.getDate() != day) return false;
year = (new Date()).getFullYear() - year;
return year >= 1 && year <= 100;
},
chkParity = (value, type, wi, vc) => {
let sum = 0;
if (!type) value = value.substr(0, 6) + "19" + value.substr(6, value.length - 6);
for (let i = 0; i < 17; i++) sum += wi[i] * parseInt(value[i]);
sum = vc[sum % 11];
return type ? (value[17].toLowerCase() == sum) : (value + sum);
};
if (jq) val = obj.val().trim();
if (/(^\d{15}$)|(^\d{17}(\d|X)$)/.test(val)) {
if (val.length == 15) val = chkParity(val, false, wi, vc);
if (chkBirthday(val) && chkParity(val, true, wi, vc)) return true;
}
if (jq) obj.focus();
return false;
}
};
return api;
}, {module: module, exports: this}, [], "Check");