Skip to content

Instantly share code, notes, and snippets.

@markyun
Created July 3, 2013 08:12
Show Gist options
  • Save markyun/5916271 to your computer and use it in GitHub Desktop.
Save markyun/5916271 to your computer and use it in GitHub Desktop.
Validate.js
/*
jsName: 验证表单的规则
Description:
Author: markyun
Email:MyGood@126.com
Author URL: http://weibo.com/920802999
Version: 1.0
UpdateTime:2013年7月3日
*/
var validateRegExp = {
decmal:"^([+-]?)\\d*\\.\\d+$", //浮点数
decmal1:"^[1-9]\\d*.\\d*|0.\\d*[1-9]\\d*$", //正浮点数
decmal2:"^-([1-9]\\d*.\\d*|0.\\d*[1-9]\\d*)$", //负浮点数
decmal3:"^-?([1-9]\\d*.\\d*|0.\\d*[1-9]\\d*|0?.0+|0)$", //浮点数
decmal4:"^[1-9]\\d*.\\d*|0.\\d*[1-9]\\d*|0?.0+|0$", //非负浮点数(正浮点数 + 0)
decmal5:"^(-([1-9]\\d*.\\d*|0.\\d*[1-9]\\d*))|0?.0+|0$", //非正浮点数(负浮点数 + 0)
intege:"^-?[1-9]\\d*$", //整数
intege1:"^[1-9]\\d*$", //正整数
intege2:"^-[1-9]\\d*$", //负整数
num:"^([+-]?)\\d*\\.?\\d+$", //数字
num1:"^[1-9]\\d*|0$", //正数(正整数 + 0)
num2:"^-[1-9]\\d*|0$", //负数(负整数 + 0)
ascii:"^[\\x00-\\xFF]+$", //仅ACSII字符
chinese:"^[\\u4e00-\\u9fa5]+$", //仅中文
color:"^[a-fA-F0-9]{6}$", //颜色
date:"^\\d{4}(\\-|\\/|\.)\\d{1,2}\\1\\d{1,2}$", //日期
email:"^\\w+((-\\w+)|(\\.\\w+))*\\@[A-Za-z0-9]+((\\.|-)[A-Za-z0-9]+)*\\.[A-Za-z0-9]+$", //邮件
idcard:"^[1-9]([0-9]{14}|[0-9]{17})$", //身份证
ip4:"^(25[0-5]|2[0-4]\\d|[0-1]\\d{2}|[1-9]?\\d)\\.(25[0-5]|2[0-4]\\d|[0-1]\\d{2}|[1-9]?\\d)\\.(25[0-5]|2[0-4]\\d|[0-1]\\d{2}|[1-9]?\\d)\\.(25[0-5]|2[0-4]\\d|[0-1]\\d{2}|[1-9]?\\d)$", //ip地址
letter:"^[A-Za-z]+$", //字母
letter_l:"^[a-z]+$", //小写字母
letter_u:"^[A-Z]+$", //大写字母
mobile:"^0?(13|15|18)[0-9]{9}$", //手机
notempty:"^\\S+$", //非空
password:"^.*[A-Za-z0-9\\w_-]+.*$", //密码
fullNumber:"^[0-9]+$", //数字
picture:"(.*)\\.(jpg|bmp|gif|ico|pcx|jpeg|tif|png|raw|tga)$", //图片
qq:"^[1-9]*[1-9][0-9]*$", //QQ号码
rar:"(.*)\\.(rar|zip|7zip|tgz)$", //压缩文件
tel:"^[0-9\-()()]{7,18}$", //电话号码的函数(包括验证国内区号,国际区号,分机号)
url:"^http[s]?:\\/\\/([\\w-]+\\.)+[\\w-]+([\\w-./?%&=]*)?$", //url
username:"^[A-Za-z0-9_\\-\\u4e00-\\u9fa5]+$", //用户名
deptname:"^[A-Za-z0-9_()()\\-\\u4e00-\\u9fa5]+$", //单位名
zipcode:"^\\d{6}$", //邮编
realname:"^[A-Za-z\\u4e00-\\u9fa5]+$", // 真实姓名
companyname:"^[A-Za-z0-9_()()\\-\\u4e00-\\u9fa5]+$",
companyaddr:"^[A-Za-z0-9_()()\\#\\-\\u4e00-\\u9fa5]+$",
companysite:"^http[s]?:\\/\\/([\\w-]+\\.)+[\\w-]+([\\w-./?%&#=]*)?$"
};
//主函数
(function ($) {
$.fn.jdValidate = function (option, callback, def) {
var ele = this;
var id = ele.attr("id");
var type = ele.attr("type");
var rel = ele.attr("rel");
var _onFocus = $("#" + id + validateSettings.onFocus.container);
var _succeed = $("#" + id + validateSettings.succeed.container);
var _isNull = $("#" + id + validateSettings.isNull.container);
var _error = $("#" + id + validateSettings.error.container);
if (def == true) {
var str = ele.val();
var tag = ele.attr("sta");
if (str == "" || str == "-1") {
validateSettings.isNull.run({
prompts:option,
element:ele,
isNullEle:_isNull,
succeedEle:_succeed
}, option.isNull);
} else if (tag == 1 || tag == 2) {
return;
} else {
callback({
prompts:option,
element:ele,
value:str,
errorEle:_error,
succeedEle:_succeed
});
}
} else {
if (typeof def == "string") {
ele.val(def);
}
if (type == "checkbox" || type == "radio") {
if (ele.attr("checked") == true) {
ele.attr("sta", validateSettings.succeed.state);
}
}
switch (type) {
case "text":
case "password":
ele.bind("focus", function () {
var str = ele.val();
if (str == def) {
ele.val("");
}
if (id == "pwd") {
$("#pwdstrength").hide();
}
validateSettings.onFocus.run({
prompts:option,
element:ele,
value:str,
onFocusEle:_onFocus,
succeedEle:_succeed
}, option.onFocus);
})
.bind("blur", function () {
var str = ele.val();
if (str == "") {
ele.val(def);
}
if (validateRules.isNull(str)) {
validateSettings.isNull.run({
prompts:option,
element:ele,
value:str,
isNullEle:_isNull,
succeedEle:_succeed
}, "");
} else {
callback({
prompts:option,
element:ele,
value:str,
errorEle:_error,
isNullEle:_isNull,
succeedEle:_succeed
});
}
});
break;
default:
if (rel && rel == "select") {
ele.bind("change", function () {
var str = ele.val();
callback({
prompts:option,
element:ele,
value:str,
errorEle:_error,
isNullEle:_isNull,
succeedEle:_succeed
});
})
} else {
ele.bind("click", function () {
callback({
prompts:option,
element:ele,
errorEle:_error,
isNullEle:_isNull,
succeedEle:_succeed
});
})
}
break;
}
}
}
})(jQuery);
//配置
var validateSettings = {
onFocus:{
state:null,
container:"_error",
style:"focus",
run:function (option, str) {
if (!validateRules.checkType(option.element)) {
option.element.removeClass(validateSettings.INPUT_style2).addClass(validateSettings.INPUT_style1);
}
option.onFocusEle.removeClass().addClass(validateSettings.onFocus.style).html(str);
}
},
isNull:{
state:0,
container:"_error",
style:"null",
run:function (option, str) {
option.element.attr("sta", 0);
if (!validateRules.checkType(option.element)) {
if (str != "") {
option.element.removeClass(validateSettings.INPUT_style1).addClass(validateSettings.INPUT_style2);
} else {
option.element.removeClass(validateSettings.INPUT_style2).removeClass(validateSettings.INPUT_style1);
}
}
option.succeedEle.removeClass(validateSettings.succeed.style);
option.isNullEle.removeClass().addClass(validateSettings.isNull.style).html(str);
}
},
error:{
state:1,
container:"_error",
style:"error",
run:function (option, str) {
option.element.attr("sta", 1);
if (!validateRules.checkType(option.element)) {
option.element.removeClass(validateSettings.INPUT_style1).addClass(validateSettings.INPUT_style2);
}
option.succeedEle.removeClass(validateSettings.succeed.style);
option.errorEle.removeClass().addClass(validateSettings.error.style).html(str);
}
},
succeed:{
state:2,
container:"_succeed",
style:"succeed",
run:function (option) {
option.element.attr("sta", 2);
option.errorEle.empty();
if (!validateRules.checkType(option.element)) {
option.element.removeClass(validateSettings.INPUT_style1).removeClass(validateSettings.INPUT_style2);
}
if (option.element.attr("id") == "schoolinput" && $("#schoolid").val() == "") {
return;
}
option.succeedEle.addClass(validateSettings.succeed.style);
}
},
INPUT_style1:"highlight1",
INPUT_style2:"highlight2"
};
//验证规则
var validateRules = {
isNull:function (str) {
return (str == "" || typeof str != "string");
},
betweenLength:function (str, _min, _max) {
return (str.length >= _min && str.length <= _max);
},
isUid:function (str) {
return new RegExp(validateRegExp.username).test(str);
},
fullNumberName:function (str) {
return new RegExp(validateRegExp.fullNumber).test(str);
},
isPwd:function (str) {
return /^.*([\W_a-zA-z0-9-])+.*$/i.test(str);
},
isPwd2:function (str1, str2) {
return (str1 == str2);
},
isEmail:function (str) {
return new RegExp(validateRegExp.email).test(str);
},
isTel:function (str) {
return new RegExp(validateRegExp.tel).test(str);
},
isMobile:function (str) {
return new RegExp(validateRegExp.mobile).test(str);
},
checkType:function (element) {
return (element.attr("type") == "checkbox" || element.attr("type") == "radio" || element.attr("rel") == "select");
},
isChinese:function (str) {
return new RegExp(validateRegExp.chinese).test(str);
},
isRealName:function (str) {
return new RegExp(validateRegExp.realname).test(str);
},
isDeptname:function (str) {
return new RegExp(validateRegExp.deptname).test(str);
},
isCompanyname:function (str) {
return new RegExp(validateRegExp.companyname).test(str);
},
isCompanyaddr:function (str) {
return new RegExp(validateRegExp.companyaddr).test(str);
},
isCompanysite:function (str) {
return new RegExp(validateRegExp.companysite).test(str);
}
};
//验证文本
var validatePrompt = {
username:{
onFocus:"4-20位字符,可由中文、英文、数字及“_”、“-”组成",
succeed:"",
isNull:"请输入用户名",
error:{
beUsed:"该用户名已被使用,请使用其它用户名注册,如果您是&quot;{1}&quot;,请<a href='https://passport.360buy.com/new/login.aspx' class='flk13'>登录</a>",
badLength:"用户名长度只能在4-20位字符之间",
badFormat:"用户名只能由中文、英文、数字及“_”、“-”组成",
fullNumberName:"用户名不能全为数字"
}
},
pwd:{
onFocus:"6-16位字符,可由英文、数字及标点符号组成",
succeed:"",
isNull:"请输入密码",
error:{
badLength:"密码长度只能在6-16位字符之间",
badFormat:"密码只能由英文、数字及标点符号组成"
}
},
pwd2:{
onFocus:"请再次输入密码",
succeed:"",
isNull:"请输入密码",
error:{
badLength:"密码长度只能在6-16位字符之间",
badFormat2:"两次输入密码不一致",
badFormat1:"密码只能由英文、数字及标点符号组成"
}
},
mail:{
onFocus:"请输入常用的邮箱,将用来找回密码、接收订单通知等",
succeed:"",
isNull:"请输入邮箱",
error:{
beUsed:"该邮箱已被使用,请更换其它邮箱,或使用该邮箱<a href='http://passport.360buy.com/retrievepassword.aspx' class='flk13'>找回密码</a>",
badFormat:"邮箱格式不正确",
badLength:"您填写的邮箱过长,邮件地址只能在50个字符以内"
}
},
authcode:{
onFocus:"请输入图片中的字符,不区分大小写",
succeed:"",
isNull:"请输入验证码",
error:"验证码错误"
},
protocol:{
onFocus:"",
succeed:"",
isNull:"请先阅读并同意《京东商城用户协议》",
error:""
},
referrer:{
onFocus:"如您注册并完成订单,推荐人有机会获得积分",
succeed:"",
isNull:"",
error:""
},
schoolinput:{
onFocus:"您可以用简拼、全拼、中文进行校名模糊查找",
succeed:"",
isNull:"请填选学校名称",
error:"请填选学校名称"
},
empty:{
onFocus:"",
succeed:"",
isNull:"",
error:""
}
};
var nameold, emailold, authcodeold;
var namestate = false, emailstate = false, authcodestate = false;
//回调函数
var validateFunction = {
username:function (option) {
var format = validateRules.isUid(option.value);
var length = validateRules.betweenLength(option.value.replace(/[^\x00-\xff]/g, "**"), 4, 20);
if (!length && format) {
validateSettings.error.run(option, option.prompts.error.badLength);
}
else if (!length && !format) {
validateSettings.error.run(option, option.prompts.error.badFormat);
}
else if (length && !format) {
validateSettings.error.run(option, option.prompts.error.badFormat);
} else if (validateRules.fullNumberName(option.value)) {
validateSettings.error.run(option, option.prompts.error.fullNumberName);
} else {
if (!namestate || nameold != option.value) {
if (nameold != option.value) {
nameold = option.value;
option.errorEle.html("<span style='color:#999'>检验中……</span>");
$.getJSON("AjaxService.aspx?action=CheckUnicknme&uid=" + escape(option.value) + "&r=" + Math.random(), function (date) {
if (date.success == 0) {
validateSettings.succeed.run(option);
namestate = true;
} else {
validateSettings.error.run(option, option.prompts.error.beUsed.replace("{1}", option.value));
namestate = false;
}
})
}
else {
validateSettings.error.run(option, option.prompts.error.beUsed.replace("{1}", option.value));
namestate = false;
}
}
else {
validateSettings.succeed.run(option);
}
}
},
pwd:function (option) {
var str1 = option.value;
var str2 = $("#pwd2").val();
var format = validateRules.isPwd(option.value);
var length = validateRules.betweenLength(option.value, 6, 16);
$("#pwdstrength").hide();
if (!length && format) {
validateSettings.error.run(option, option.prompts.error.badLength);
}
else if (!length && !format) {
validateSettings.error.run(option, option.prompts.error.badFormat);
}
else if (length && !format) {
validateSettings.error.run(option, option.prompts.error.badFormat);
}
else {
validateSettings.succeed.run(option);
validateFunction.pwdstrength();
}
if (str2 == str1) {
$("#pwd2").focus();
}
},
pwd2:function (option) {
var str1 = option.value;
var str2 = $("#pwd").val();
var length = validateRules.betweenLength(option.value, 6, 16);
var format2 = validateRules.isPwd2(str1, str2);
var format1 = validateRules.isPwd(str1);
if (!length) {
validateSettings.error.run(option, option.prompts.error.badLength);
} else {
if (!format1) {
validateSettings.error.run(option, option.prompts.error.badFormat1);
} else {
if (!format2) {
validateSettings.error.run(option, option.prompts.error.badFormat2);
}
else {
validateSettings.succeed.run(option);
}
}
}
},
mail:function (option) {
var format = validateRules.isEmail(option.value);
var format2 = validateRules.betweenLength(option.value, 0, 50);
if (!format) {
validateSettings.error.run(option, option.prompts.error.badFormat);
} else {
if (!format2) {
validateSettings.error.run(option, option.prompts.error.badLength);
} else {
if (!emailstate || emailold != option.value) {
if (emailold != option.value) {
emailold = option.value;
option.errorEle.html("<span style='color:#999'>检验中……</span>");
$.getJSON("AjaxService.aspx?action=CheckUemail&str=" + escape(option.value) + "&r=" + Math.random(), function (date) {
if (date.success == 0) {
validateSettings.succeed.run(option);
emailstate = true;
} else {
validateSettings.error.run(option, option.prompts.error.beUsed);
emailstate = false;
}
})
}
else {
validateSettings.error.run(option, option.prompts.error.beUsed);
emailstate = false;
}
}
else {
validateSettings.succeed.run(option);
}
}
}
},
referrer:function (option) {
var bool = validateRules.isNull(option.value);
if (bool) {
option.element.val("可不填");
return;
} else {
validateSettings.succeed.run(option);
}
},
schoolinput:function (option) {
var bool = validateRules.isNull(option.value);
if (bool) {
validateSettings.error.run(option, option.prompts.error);
return;
} else {
validateSettings.succeed.run(option);
}
},
authcode:function (option) {
// if (!authcodestate || authcodeold != option.value) {
// if (authcodeold != option.value) {
//// authcodeold = option.value;
//// option.errorEle.html("<span style='color:#999'>检验中……</span>");
//// var uuid = $("#JD_Verification1").attr("src").split("&uid=")[1].split("&")[0];
//// $.getJSON("AjaxService.aspx?action=CheckAuthcode&str=" + escape(option.value) + "&r=" + Math.random() + "&uuid=" + uuid, function(date) {
//// if (date.success == 0) {
//// validateSettings.succeed.run(option);
//// authcodestate = true;
//// } else {
//// validateSettings.error.run(option, option.prompts.error);
//// authcodestate = false;
//// }
//// })
// }
// else {
// validateSettings.error.run(option, option.prompts.error);
// authcodestate = false;
// }
// }
// else {
// validateSettings.succeed.run(option);
// }
validateSettings.succeed.run(option);
authcodestate = true;
},
protocol:function (option) {
if (option.element.attr("checked") == true) {
option.element.attr("sta", validateSettings.succeed.state);
option.errorEle.html("");
} else {
option.element.attr("sta", validateSettings.isNull.state);
option.succeedEle.removeClass(validateSettings.succeed.style);
}
},
pwdstrength:function () {
var element = $("#pwdstrength");
var value = $("#pwd").val();
if (value.length >= 6 && validateRules.isPwd(value)) {
$("#pwd_error").empty();
element.show();
var pattern_1 = /^.*([\W_])+.*$/i;
var pattern_2 = /^.*([a-zA-Z])+.*$/i;
var pattern_3 = /^.*([0-9])+.*$/i;
var level = 0;
if (value.length > 10) {
level++;
}
if (pattern_1.test(value)) {
level++;
}
if (pattern_2.test(value)) {
level++;
}
if (pattern_3.test(value)) {
level++;
}
if (level > 3) {
level = 3;
}
switch (level) {
case 1:
element.removeClass().addClass("strengthA");
break;
case 2:
element.removeClass().addClass("strengthB");
break;
case 3:
element.removeClass().addClass("strengthC");
break;
default:
break;
}
} else {
element.hide();
}
},
checkGroup:function (elements) {
for (var i = 0; i < elements.length; i++) {
if (elements[i].checked) {
return true;
}
}
return false;
},
checkSelectGroup:function (elements) {
for (var i = 0; i < elements.length; i++) {
if (elements[i].value == -1) {
return false;
}
}
return true;
},
showPassword:function (type) {
var v1 = $("#pwd").val(), s1 = $("#pwd").attr("sta"), c1 = document.getElementById("pwd").className, t1 = $("#pwd").attr("tabindex");
var v2 = $("#pwd2").val(), s2 = $("#pwd2").attr("sta"), c2 = document.getElementById("pwd2").className, t2 = $("#pwd2").attr("tabindex");
var P1 = $("<input type='" + type + "' value='" + v1 + "' sta='" + s1 + "' class='" + c1 + "' id='pwd' name='pwd' tabindex='" + t1 + "'/>");
$("#pwd").after(P1).remove();
$("#pwd").bind("keyup",
function () {
validateFunction.pwdstrength();
}).jdValidate(validatePrompt.pwd, validateFunction.pwd)
var P2 = $("<input type='" + type + "' value='" + v2 + "' sta='" + s2 + "' class='" + c2 + "' id='pwd2' name='pwd2' tabindex='" + t2 + "'/>");
$("#pwd2").after(P2).remove();
$("#pwd2").jdValidate(validatePrompt.pwd2, validateFunction.pwd2);
},
FORM_submit:function (elements) {
var bool = true;
for (var i = 0; i < elements.length; i++) {
if ($(elements[i]).attr("sta") == 2) {
bool = true;
} else {
bool = false;
break;
}
}
return bool;
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment