js校验

/**
 * SF_Validate类提供所有格式的效验功能
 */
function SF_Validate() {
}
/**
 * 判断是否是第一个验证不通过的对象
 * @param {Object} focusObj 定位控件对象
 * @param {Object} obj 当前控件对象
 */
SF_Validate._setNullObj_ = function(focusObj, obj) {
	if (SF_DataConvert.isNullOrEmpty(focusObj)) {
		focusObj = obj;
	}
	return focusObj;
};

/**
 * 光标定位
 * @param {Object} focusObj 定位控件对象
 */
SF_Validate._focus_ = function(focusObj) {
	if (!SF_DataConvert.isNullOrEmpty(focusObj)) {
		$(focusObj).focus();
	}
};

/**
 * 验证带“vaildate”属性的input标签的值
 * @param idstr form表单id的jquery格式
 * @param focusObj 值不合法的input标签对象
 * @returns {Boolean}值不合法返回false,否则返回true
 */
SF_Validate._checkValidate_ = function(idstr,focusObj){
	var result = true ;
	var tag = idstr + 'input[vaildate],' + idstr + 'select[vaildate],' + idstr+ 'textarea[vaildate]'; //其他信息验证
	$(tag).each(function(i) {
		var obj = $(this); // 控件对象
		var value = obj.val(); // 控件的值
		var vaildateStr = obj.attr("vaildate"); // 控件的验证信息

		if (SF_DataConvert.isNullOrEmpty(vaildateStr))return;

		var arr = vaildateStr.split(SF_SplitType.ARRAY); // 获得需要验证的方法

		for (i = 0; i < arr.length; i++) {
			var column = arr[i].split(SF_SplitType.FIELD); // 每个验证方法分组,分为// [方法名]|[自定义提示信息]
			var msg = SF_Validate.getMessage(value, column[0]); // 通过方法名获得默认提示信息

			if (SF_DataConvert.isNullOrEmpty(msg))continue; // 表示验证通过

			focusObj = SF_Validate._setNullObj_(focusObj, obj);

			if (!SF_DataConvert.isNullOrEmpty(column[1])) {
				msg = column[1]; // 如果自定义提示信息不为空,则替换默认提示信息为自定义提示信息
			}

			SF_Window.addError(obj, msg); // 显示错误信息
			result = false;
			break;
		}
	});
	return result;
} ;

/**
 * 验证input标签值是否符合最大长度或者最小长度
 * @param idstr form表单id的jquery格式
 * @param focusObj 值不合法的input标签对象
 * @returns {Boolean} 值不合法返回false,否则返回true
 */
SF_Validate._checkLength_=function(idstr,focusObj){
	var result = true ;
	var tag = idstr + 'input[minlength],' + idstr + 'input[maxlength],' + idstr+ 'textarea[maxlength],' + idstr + 'textarea[minlength]' ;
	
	$(tag).each(function(i) {
		var obj = $(this); //控件对象
		var str = obj.val(); //控件的值
		var maxlength = obj.attr("maxlength"); //最大长度
		var minlength = obj.attr("minlength"); //最小长度
		var flagmax = SF_DataConvert.isNullOrEmpty(maxlength); //判断最大长度是否为空
		var flagmin = SF_DataConvert.isNullOrEmpty(minlength); //判断最小长度是否为空
		
		if (!flagmax && !flagmin) { //同时不为空,进行判断
			if (!SF_Validate.range(str, minlength, maxlength)) {
				focusObj = SF_Validate._setNullObj_(focusObj, obj);
				SF_Window.addError(obj, '请输入' + minlength + '-'+ maxlength + '个字符!');
				result = false;
			};
		} else {
			if (!flagmax) { //如果最大长度不为空 ,最小长度为空,只需要判断最大长度
				if (!SF_Validate.range(str, 0, maxlength)) {
					focusObj = SF_Validate._setNullObj_(focusObj, obj);
					SF_Window.addError(obj,'请输入小于' + maxlength + '个字符!');
					result = false;
				};
			}
			if (!flagmin) { //如果最小长度不为空 ,最大长度为空只要判断最小长度。
				if (!SF_Validate.range(str, minlength,Number.MAX_VALUE)) {
					focusObj = SF_Validate._setNullObj_(focusObj, obj);
					SF_Window.addError(obj,'请至少输入' + minlength + '个字符!');
					result = false;
				};
			};
		};
	});
	return result ;
} ;

/**
 * 对Form内的表单进行合法校验和检查单元的功能
 * @param {String} formId Form的ID
 */
SF_Validate.check = function(formId) {
	var focusObj = null;
	var result = true;
	var idstr = "";
	
	if (!SF_DataConvert.isNullOrEmpty(formId)) {
		idstr = "#" + formId + " "; //拼凑FORM的前缀
	}
	
	SF_Window.removeError(); //每次验证清除掉之前的验证信息
	result = SF_Validate._checkValidate_(idstr,focusObj) && result; 
	result = SF_Validate._checkLength_(idstr,focusObj) && result;
	SF_Validate._focus_(focusObj);
	SF_Frame.resize();
	return result;
};

/**
 * 通过方法名验证
 * @param {Object} obj //需要验证的值
 * @param {Object} mothodName	//方法名
 * return 返回默认提示信息
 */
SF_Validate.getMessage = function(obj, mothodName) {
	var result = "";
	
	switch (mothodName) {
	case "isNull":
		if (!SF_Validate.isNotNull(obj)) {result = "该项必填!";}
		break;
	case "isNumber":
		if (!SF_Validate.isNumber(obj)) { result = "输入内容必须为数字!";}
		break;
	case "isPositiveNumber":
		if (!SF_Validate.isPositiveNumber(obj)) { result = "输入内容必须为数字,且大于0!";}
		break;
	case "isInteger":
		if (!SF_Validate.isInteger(obj)) { result = "输入内容只能是整数!";}
		break;
	case "isPositiveInteger":
		if (!SF_Validate.isPositiveInteger(obj)) { result = "输入内容只能是正整数!";}
		break;
	case "isDouble":
		if (!SF_Validate.isDouble(obj)) { result = "输入内容只能是小数!";}
		break;
	case "isCurrency":
		if (!SF_Validate.isCurrency(obj)) { result = "输入内容必须符合货币格式!";}
		break;
	case "isZip":
		if (!SF_Validate.isZip(obj)) { result = "请输入标准邮编格式,例如:350001";}
		break;
	case "isIdCard":
		if (!SF_Validate.isIdCard(obj)) { result = "请输入标准的身份证!";}
		break;
	case "isPhone":
		if (!SF_Validate.isPhone(obj)) {result = "请输入正确的固定电话,例如:0591-88888888";}
		break;
	case "isMobile":
		if (!SF_Validate.isMobile(obj)) {result = "请输入正确的手机,例如:13800000000";}
		break;
	case "isTel":
		if (!SF_Validate.isTel(obj)) { result = "请输入正确的手机或者固定电话!";}
		break;
	case "isEmail":
		if (!SF_Validate.isEmail(obj)) { result = "请输入正确的Email,例如:aa@qq.com";}
		break;
	case "isUrl":
		if (!SF_Validate.isUrl(obj)) { result = "请输入正确的URL地址!";}
		break;
	case "isChinese":
		if (!SF_Validate.isChinese(obj)) {result = "输入内容只能是中文!";}
		break;
	case "isEnglish":
		if (!SF_Validate.isEnglish(obj)) { result = "输入内容只能是英文!";}
		break;
	case "isImage":
		if (!SF_Validate.isImage(obj)) { result = "请上传图片格式的文件!";}
		break;
	case "isEnglishAndNumber":
		if (!SF_Validate.isEnglishAndNumber(obj)) {result = "输入内容只能是数字、字母、下划线!";}
		break;
	case "isIp":
		if (!SF_Validate.isIP(obj)) { result = "输入的IP格式有误!";}
		break;
	case "filterSql":
		if (!SF_Validate.filterSql(obj)) { result = "请不要输入特殊字符和SQL关键字!";}
		break;
	case "isFax":
		if (!SF_Validate.isFax(obj)) {result = "请输入正确的传真号码,例如:0591-88888888";}
		break;
	case "isRange":
		if (!SF_Validate.range(obj, '4', '10')) { result = "请输入正确长度的密码,密码长度为4-10位";
		}
		break;
	default:
		break;
	}
	return result;
};

/**
 * 检查传入的值是否满足正则表达式
 * @param {Object} str  需要验证的值,如果为空则返回true;
 * @param {Object} reg 正则表达式
 * return 返回boolean对象
 */
SF_Validate.match = function(str, reg) {
	if (SF_DataConvert.isNullOrEmpty(str)) {
		return true;
	}
	var flag = reg.test(str);
	return flag;
};

/**
 * 检查传入的值是否为空
 * @param {Object} str  需要验证的值
 * return 返回boolean对象
 */
SF_Validate.isNotNull = function(str) {
	if (SF_DataConvert.isNullOrEmpty(str)) {
		return false;
	} else {
		return true;
	}
};

/**
 * 检查传入的值是否IP格式
 * @param {Object} str  需要验证的值
 * return 返回boolean对象
 */
SF_Validate.isIP = function(str) {
	var reg = /^((\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5]))(,((\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])))*$/;
	return SF_Validate.match(str, reg);
};

/**
 * 判断是否为特殊字符和SQL关键字
 * @param {Object} str  需要验证的值
 * return 返回boolean对象
 */
SF_Validate.filterSql = function(str) {
	var reg = /(create|drop|alter|select|declare|fetch|begin|end|cursor|cast|execute|insert|update|delete|truncat|exec|call|count|kill|open|or|and|not|xp_.+|\*|--|'|"|=|;|>|<|%)\b/i;
	var flag = reg.test(str);
	return !flag;
};

/**
 * 检查传入的值是否为数字(包括正整数和0)
 * @param {Object} str  需要验证的值
 * return 返回boolean对象
 */
SF_Validate.isNumber = function(str) {
	var reg = /^\d+$/;
	return SF_Validate.match(str, reg);
};

/**
 * 检查传入的值是否为正数(包括小数,但不包括负数和0)
 * @param {Object} str  需要验证的值
 * return 返回boolean对象
 */
SF_Validate.isPositiveNumber = function(str) {
	var reg = /^([1-9]\d*)(\.{1}\d{1,2}|\.{0})$/;
	return SF_Validate.match(str, reg);

};

/**
 * 检查传入的值是否为整数(整数,包括负数和0)
 * @param {Object} str  需要验证的值
 * return 返回boolean对象
 */
SF_Validate.isInteger = function(str) {
	var reg = /^[-\+]?\d+$/;
	return SF_Validate.match(str, reg);
};

/**
 * 检查传入的值是否为正整数(整数,但不包括负数)
 * @param {Object} str  需要验证的值
 * return 返回boolean对象
 */
SF_Validate.isPositiveInteger = function(str) {
	var reg = /^[0-9]*[1-9][0-9]*$/;
	//var reg = /^[0-9]*[0-9]*$/;
	return SF_Validate.match(str, reg);
};

/**
 * 检查传入的值是否为小数
 * @param {Object} str  需要验证的值
 * return 返回boolean对象
 */
SF_Validate.isDouble = function(str) {
	var reg = /^[-\+]?\d+(\.\d+)?$/;
	return SF_Validate.match(str, reg);
};

/**
 * 检查传入的值是否为货币格式
 * @param {Object} str  需要验证的值
 * return 返回boolean对象
 */
SF_Validate.isCurrency = function(str) {
	var reg = /^\d+(\.\d+)?$/;
	return SF_Validate.match(str, reg);

};

/**
 * 检查传入的值是否为邮编
 * @param {Object} str  需要验证的值
 * return 返回boolean对象
 */
SF_Validate.isZip = function(str) {
	var reg = /^[1-9]\d{5}$/;
	return SF_Validate.match(str, reg);
};

/**
 * 检查传入的值的长度是否符合规定
 * @param {Object} str  需要验证的值
 * @param {int} min 最小长度
 * @param {int} max 最大长度
 * return 返回boolean对象
 */
SF_Validate.range = function(str, min, max) {
	var flag;
	if (str.length > max || str.length < min) {
		flag = false;
	} else {
		flag = true;
	}
	return flag;
};

/**
 * 检查传入的值是否为身份证格式
 * @param {Object} str  需要验证的值
 * return 返回boolean对象
 */
SF_Validate.isIdCard = function(str) {
	var reg = /^([0-9]{15}|([0-9]{17}([0-9]|x|X)))$/;
	return SF_Validate.match(str, reg);
};

/**
 * 检查传入的值是否为固定电话
 * @param {Object} str  需要验证的值
 * return 返回boolean对象
 */
SF_Validate.isPhone = function(str) {
	var reg = /^((\(\d{3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}[- ]?)?[1-9]\d{6,7}$/;
	return SF_Validate.match(str, reg);
};

/**
 * 检查传入的值是否为手机
 * @param {Object} str  需要验证的值
 * return 返回boolean对象
 */
SF_Validate.isMobile = function(str) {
	var reg = /^[1]\d{10}(?!\d)$/;
	return SF_Validate.match(str, reg);
};

/**
 * 检查传入的值验证是否为手机号码或则固定电话
 * @param {Object} str  需要验证的值
 * return 返回boolean对象
 */
SF_Validate.isTel = function(str) {
	var reg = /\d{3}-\d{8}|\d{4}-\d{7}|[1]\d{10}(?!\d)/;
	return SF_Validate.match(str, reg);
};

/**
 * 检查传入的值是否为Email
 * @param {Object} str  需要验证的值
 * return 返回boolean对象
 */
SF_Validate.isEmail = function(str) {
	var reg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((\.[a-zA-Z0-9_-]{2,}){1,2})$/;
	return SF_Validate.match(str, reg);
};

/**
 * 检查传入的值是否为URL地址
 * @param {Object} str  需要验证的值
 * return 返回boolean对象
 */
SF_Validate.isUrl = function(str) {
	var reg = /^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$/;
	return SF_Validate.match(str, reg);
};

/**
 * 检查传入的值是否为中文
 * @param {Object} str  需要验证的值
 * return 返回boolean对象
 */
SF_Validate.isChinese = function(str) {
	var reg = /^[\u4e00-\u9fa5](\s*[\u4e00-\u9fa5])*$/;
	return SF_Validate.match(str, reg);
};

/**
 * 检查传入的值是否为英文
 * @param {Object} str  需要验证的值
 * return 返回boolean对象
 */
SF_Validate.isEnglish = function(str) {
	var reg = /^[a-zA-Z]+$/;
	return SF_Validate.match(str, reg);
};

/**
 * 检查传入的url是否为图片格式
 * @param {String} url  需要验证的URL
 * return 返回boolean对象
 */
SF_Validate.isImage = function(url) {
	var type = "jpeg、jpg、gif、png、tiff、bmp";
	return SF_Validate.files(url, type);
};
/**
 * 检查传入的值是否为英文或者数字
 * @param {String} str  需要验证的值
 * return 返回boolean对象
 */
SF_Validate.isEnglishAndNumber = function(str) {
	var reg = /^[a-zA-Z0-9_-]+$/;
	return SF_Validate.match(str, reg);
};
/**
 * 检查传入的值是否为传真
 * @param {Object} str  需要验证的值
 * return 返回boolean对象
 */
SF_Validate.isFax = function(str) {
	var reg = /^(\d{3,4}-)?\d{7,8}$/;
	return SF_Validate.match(str, reg);
};
/**
 * 检查传入的url是否为指定的文件格式
 * @param {String} url  需要验证的URL
 * @param {String} type  验证的文件格式,如果多个以逗号隔开, 例如可传入"zip,rar",即验证是否符合zip或则rar格式
 * return 返回boolean对象
 */
SF_Validate.files = function(url, type) {
	var fileUrl = url.toLowerCase();
	var postfix = fileUrl.substring(fileUrl.lastIndexOf('.') + 1,
			fileUrl.length);
	if (type.indexOf(postfix) > -1) {
		return true;
	} else {
		return false;
	}
};

  

posted @ 2018-10-24 16:13  剑小新  阅读(257)  评论(0)    收藏  举报