var FormValid = function(frm) {
this.frm = frm;
this.errMsg = new Array();
this.errName = new Array();
// 输入值不能为空
this.required = function(inputObj) {
if (typeof (inputObj) == "undefined" || inputObj.value.trim() == "") {
return false;
}
return true;
};
this.mustOne = function(inputObj) {
var fstObj = inputObj;
if (fstObj != null) {
for (var i = 0; i < fstObj.value.length; i++) {
if (fstObj.value.charAt(i) == "1") {
return true;
}
}
}
return false;
};
this.equal = function(inputObj, formElements) {
var fstObj = inputObj;
var sndObj = formElements[inputObj.getAttribute('eqaulName')];
if (fstObj != null && sndObj != null) {
if (fstObj.value != sndObj.value) {
return false;
}
}
return true;
};
// 数字对比,输入值要大于对比值
this.numgt = function(inputObj, formElements) {
var fstObj = inputObj;
var sndObj = formElements[inputObj.getAttribute('eqaulName')];
if (fstObj != null && sndObj != null && fstObj.value.trim() != ''
&& sndObj.value.trim() != '') {
if (fstObj.value - sndObj.value < 0) {
return false;
}
}
return true;
};
// 数字对比,输入值要小于对比值
this.numdt = function(inputObj, formElements) {
var fstObj = inputObj;
var sndObj = formElements[inputObj.getAttribute('eqaulName')];
if (fstObj != null && sndObj != null && fstObj.value.trim() != ''
&& sndObj.value.trim() != '') {
if (fstObj.value - sndObj.value > 0) {
return false;
}
}
return true;
};
// 数字对比,输入值不能等于对比值
this.noequal = function(inputObj, formElements) {
var fstObj = inputObj;
var sndObj = formElements[inputObj.getAttribute('eqaulName')];
if (fstObj != null && sndObj != null && fstObj.value.trim() != ''
&& sndObj.value.trim() != '') {
if (fstObj.value == sndObj.value) {
return false;
}
}
return true;
};
// 输入值大于对比日期
this.gt = function(inputObj, formElements) {
var fstObj = inputObj;
var sndObj = formElements[inputObj.getAttribute('eqaulName')];
if (fstObj != null && sndObj != null && fstObj.value.trim() != ''
&& sndObj.value.trim() != '') {
var i = "";
if (fstObj.value.indexOf('-') > 0) {
i = '-';
} else if (fstObj.value.indexOf('/') > 0) {
i = '/';
} else if (fstObj.value.indexOf('.') > 0) {
i = '.';
}
var fs = fstObj.value.split(i);
var fsYear = fs[0];
var fsMonth = fs[1];
var fsDay = fs[2];
var sn = sndObj.value.split('-');
var snYear = sn[0];
var snMonth = sn[1];
var snDay = sn[2];
if (fsYear - snYear < 0) {
return false;
} else if (fsYear == snYear && fsMonth - snMonth < 0) {
return false;
} else if (fsYear == snYear && fsMonth == snMonth
&& fsDay - snDay <= 0) {
return false;
}
}
return true;
};
// 输入值大于等于对比日期
this.dt = function(inputObj, formElements) {
var fstObj = inputObj;
var sndObj = formElements[inputObj.getAttribute('eqaulName1')];
if (fstObj != null && sndObj != null && fstObj.value.trim() != ''
&& sndObj.value.trim() != '') {
var i = "";
if (fstObj.value.indexOf('-') > 0) {
i = '-';
} else if (fstObj.value.indexOf('/') > 0) {
i = '/';
} else if (fstObj.value.indexOf('.') > 0) {
i = '.';
} else {
if (fstObj.value - sndObj.value > 0)
return false;
}
var fs = fstObj.value.split(i);
var fsYear = fs[0];
var fsMonth = fs[1];
var fsDay = fs[2];
var sn = sndObj.value.split('-');
var snYear = sn[0];
var snMonth = sn[1];
var snDay = sn[2];
if (fsYear - snYear < 0) {
return false;
} else if (fsYear == snYear && fsMonth - snMonth < 0) {
return false;
} else if (fsYear == snYear && fsMonth == snMonth
&& fsDay - snDay < 0) {
return false;
}
}
return true;
};
// 输入值小于对比日期
this.today = function(inputObj, formElements) {
var fstObj = inputObj;
var sndObj = formElements[inputObj.getAttribute('eqaulName2')];
if (fstObj != null && sndObj != null && fstObj.value.trim() != ''
&& sndObj.value.trim() != '') {
var i = "";
if (fstObj.value.indexOf('-') > 0) {
i = '-';
} else if (fstObj.value.indexOf('/') > 0) {
i = '/';
} else if (fstObj.value.indexOf('.') > 0) {
i = '.';
}
var fs = fstObj.value.split(i);
var fsYear = fs[0];
var fsMonth = fs[1];
var fsDay = fs[2];
var sn = sndObj.value.split('-');
var snYear = sn[0];
var snMonth = sn[1];
var snDay = sn[2];
if (fsYear - snYear > 0) {
return false;
} else if (fsYear == snYear && fsMonth - snMonth > 0) {
return false;
} else if (fsYear == snYear && fsMonth == snMonth
&& fsDay - snDay > 0) {
return false;
}
return true;
}
return true;
};
this.today2 = function(inputObj, formElements) {
var fstObj = inputObj;
var sndObj = formElements[inputObj.getAttribute('eqaulName2')];
if (fstObj != null && sndObj != null && fstObj.value.trim() != ''
&& sndObj.value.trim() != '') {
var fs = fstObj.value.split('-');
var fsYear = parseInt(fs[0]);
var fsMonth = parseInt(fs[1]);
var fsDay = parseInt(fs[2]);
var sn = sndObj.value.split('-');
var snYear = parseInt(sn[0]);
var snMonth = parseInt(sn[1]);
var snDay = parseInt(sn[2]);
if (fsYear < snYear) {
return false;
} else if (fsYear == snYear && fsMonth < snMonth) {
return false;
} else if (fsYear == snYear && fsMonth == snMonth && fsDay < snDay) {
return false;
}
}
return true;
};
this.today3 = function(inputObj, formElements) {
var fstObj = inputObj;
var sndObj = formElements[inputObj.getAttribute('eqaulName3')];
if (fstObj != null && sndObj != null && fstObj.value.trim() != ''
&& sndObj.value.trim() != '') {
var fs = fstObj.value.split('-');
var fsYear = parseInt(fs[0]);
var fsMonth = parseInt(fs[1]);
var fsDay = parseInt(fs[2]);
var sn = sndObj.value.split('-');
var snYear = parseInt(sn[0]);
var snMonth = parseInt(sn[1]);
var snDay = parseInt(sn[2]);
if (fsYear < snYear) {
return false;
} else if (fsYear == snYear && fsMonth < snMonth) {
return false;
} else if (fsYear == snYear && fsMonth == snMonth && fsDay < snDay) {
return false;
}
}
return true;
};
// 验证是否为固定电话(0570~0580)
this.gddh = function(inputObj) {
var beg = inputObj.value.substring(0, 1);
var beg1 = inputObj.value.substring(1, 2);
var beg2 = inputObj.value.substring(2, 3);
var beg3 = inputObj.value.substring(3, 4);
if (beg == 0 && beg1 == 5 && beg2 == 8 && beg3 == 0) {
return true;
}
if (beg != 0 || beg1 != 5 || beg2 != 7) {
return false;
}
return true;
};
// 判断inputObj的值是否大于等于eqaulDate的值。若小于,则返回false,否则返回true
this.compDate = function(inputObj, formElements) {
var fstObj = inputObj;
var sndObj = formElements[inputObj.getAttribute('eqaulDate')];
if (fstObj != null && sndObj != null && fstObj.value.trim() != ''
&& sndObj.value.trim() != '') {
var fs = fstObj.value.split('-');
var fsYear = parseInt(fs[0]);
var fsMonth = parseFloat(fs[1]);
var fsDay = parseFloat(fs[2]);
var sn = sndObj.value.split('-');
var snYear = parseInt(sn[0]);
var snMonth = parseFloat(sn[1]);
var snDay = parseFloat(sn[2]);
if (fsYear < snYear) {
return false;
} else if (fsYear == snYear && fsMonth < snMonth) {
return false;
} else if (fsYear == snYear && fsMonth == snMonth && fsDay < snDay) {
return false;
}
}
return true;
};
this.compDateGt = function(inputObj, formElements) {
var fstObj = inputObj;
var sndObj = formElements[inputObj.getAttribute('eqaulDate')];
alert(sndObj.value);
if (fstObj != null && sndObj != null && fstObj.value.trim() != ''
&& sndObj.value.trim() != '') {
var fs = fstObj.value.split('-');
var fsYear = parseInt(fs[0]);
var fsMonth = parseInt(fs[1]);
var fsDay = parseInt(fs[2]);
var sn = sndObj.value.split('-');
var snYear = parseInt(sn[0]);
var snMonth = parseInt(sn[1]);
var snDay = parseInt(sn[2]);
if (fsYear > snYear) {
return false;
} else if (fsYear == snYear && fsMonth > snMonth) {
return false;
} else if (fsYear == snYear && fsMonth == snMonth && fsDay > snDay) {
return false;
}
}
return true;
};
this.compare = function(inputObj, formElements) {
var fstObj = inputObj;
var sndObj = formElements[inputObj.getAttribute('objectName')];
if (fstObj != null && sndObj != null && fstObj.value.trim() != ''
&& sndObj.value.trim() != '') {
if (!(eval(parseFloat(fstObj.value)
+ inputObj.getAttribute('operate')
+ parseFloat(sndObj.value)))) {
return false;
}
}
return true;
};
this.limit = function(inputObj) {
var len = inputObj.value.length;
if (len) {
var minv = parseInt(inputObj.getAttribute('min'));
var maxv = parseInt(inputObj.getAttribute('max'));
minv = minv || 0;
maxv = maxv || Number.MAX_VALUE;
return minv <= len && len <= maxv;
}
return true;
};
this.range = function(inputObj) {
var val = parseInt(inputObj.value);
if (inputObj.value) {
var minv = parseInt(inputObj.getAttribute('min'));
var maxv = parseInt(inputObj.getAttribute('max'));
minv = minv || 0;
maxv = maxv || Number.MAX_VALUE;
return minv <= val && val <= maxv;
}
return true;
};
this.requireChecked = function(inputObj) {
var minv = parseInt(inputObj.getAttribute('min'));
var maxv = parseInt(inputObj.getAttribute('max'));
minv = minv || 1;
maxv = maxv || Number.MAX_VALUE;
var checked = 0;
var groups = document.getElementsByName(inputObj.name);
for (var i = 0; i < groups.length; i++) {
if (groups[i].checked)
checked++;
}
return minv <= checked && checked <= maxv;
};
this.filter = function(inputObj) {
var value = inputObj.value;
var allow = inputObj.getAttribute('allow');
if (value.trim()) {
return new RegExp("^.+\.(?=EXT)(EXT)$".replace(/EXT/g, allow.split(
/\s*,\s*/).join("|")), "gi").test(value);
}
return true;
};
this.isNo = function(inputObj) {
var value = inputObj.value;
var noValue = inputObj.getAttribute('noValue');
return value != noValue;
};
this.isTelephone = function(inputObj) {
inputObj.value = inputObj.value.trim();
if (inputObj.value == '') {
return true;
} else {
if (!RegExps.isMobile.test(inputObj.value)
&& !RegExps.isPhone.test(inputObj.value)) {
return false;
}
}
return true;
};
this.checkReg = function(inputObj, reg, msg) {
inputObj.value = inputObj.value.trim();
if (inputObj.value == '') {
return true;
} else {
return reg.test(inputObj.value);
}
};
this.passed = function() {
if (document.getElementById("htmlError"))
$("div#htmlError").empty(); // 进入首先清除div内的提醒信息
if (this.errMsg.length > 0) {
FormValid.showError(this.errMsg, this.errName, this.frm.name);
if (this.errName[0].indexOf('[') == -1) {
frt = document.getElementsByName(this.errName[0])[0];
if (frt.type == 'text' || frt.type == 'password') {
// frt.focus();
}
}
return false;
} else {
return FormValid.succeed();
}
};
this.addErrorMsg = function(name, str) {
this.errMsg.push(str);
this.errName.push(name);
};
this.addAllName = function(name) {
FormValid.allName.push(name);
};
};
FormValid.allName = new Array();
FormValid.showError = function(errMsg) {
var msg = "";
for (var i = 0; i < errMsg.length; i++) {
msg += "- " + errMsg[i] + "\n";
}
alert(msg);
};
FormValid.showError = function(errMsg, name, formname) {
if (typeof (formname) != 'undefined') {
for (key in errMsg) {
var errorid = [ "errorMsg", key ].join("");
var errorname = "formError";
var error = ' *' + errMsg[key]
+ '
';
$("div#htmlError").append(error);
if (key == 0) {
$('#' + errorid).click();
}
}
}
};
FormValid.succeed = function() {
return true;
};
function checklen(inputObj) {
var lenE = inputObj.value.length;
var lenC = 0;
var CJK = inputObj.value.match(/[\u4E00-\u9FA5\uF900-\uFA2D]/g);
if (CJK != null)
lenC += CJK.length;
tno.innerText = inputObj.maxlength - lenC - lenE;
if (tno.innerText < 0) {
var tmp = 0;
var cut = inputObj.value.substring(0, inputObj.maxlength);
for (var i = 0; i < cut.length; i++) {
tmp += /[\u4E00-\u9FA5\uF900-\uFA2D]/.test(cut.charAt(i)) ? 2 : 1;
if (tmp > inputObj.maxlength)
break;
}
inputObj.value = cut.substring(0, i);
}
}
function goNextText(field, event) {
var keyCode = event.keyCode ? event.keyCode : event.which ? event.which
: event.charCode;
if (keyCode == 13) {
var i;
for (i = 0; i < field.form.elements.length; i++)
if (field == field.form.elements[i])
break;
i = (i + 1) % field.form.elements.length;
field.form.elements[i].focus();
return false;
} else {
return true;
}
}
function pitchOn(id, frm) {
document.body.focus();
var pitch = document.getElementById(id);
var i = pitch.innerHTML.substring(1, pitch.innerHTML.length);
var text = frm.elements;
var dealId = "";
var dealName = "";
for (var x = 0; x < text.length; x++) {
if (text[x].getAttribute("errmsg") != undefined) {
var array = text[x].getAttribute("errmsg").split('|');
if (array.length > 0) {
for (var j = 0; j < array.length; j++) {
if (array[j] == i) {
if (frm.elements[x].id != 'undefined')
dealId = frm.elements[x].id;
if (frm.elements[x].name != 'undefined')
dealName = frm.elements[x].name;
}
}
}
}
}
if (dealId != "") {
if (document.getElementById(dealId).type != "hidden") {
document.getElementById(dealId).focus();
}
}
if (dealId == "" && dealName != "") {
if (dealName != "") {
document.getElementsByName(dealName)[0].focus();
}
}
}
function validator(frm) {
var formElements = frm.elements;
var fv = new FormValid(frm);
FormValid.allName = new Array();
for (var i = 0; i < formElements.length; i++) {
if (formElements[i].disabled == true)
continue;
var msgs = fvCheck(formElements[i], fv, formElements);
if (msgs.length > 0) {
for (n in msgs) {
fv.addErrorMsg(formElements[i].name, msgs[n]);
}
}
}
return fv.passed();
}
function fvCheck(e, fv, formElements) {
var validType = e.getAttribute('valid');
var errorMsg = e.getAttribute('errmsg');
if (!errorMsg) {
errorMsg = '';
}
if (validType == null)
return [];
fv.addAllName(e.name);
var vts = validType.split('|');
var ems = errorMsg.split('|');
var r = [];
for (var j = 0; j < vts.length; j++) {
var curValidType = vts[j];
var curErrorMsg = ems[j];
var validResult;
switch (curValidType) {
case 'isAreaCode': // 验证区号
case 'isPositive': // 验证是否是正数
case 'isPosInt': // 验证是否是正整数
case 'isNumber':
case 'isEmail':
case 'isPhone':
case 'isMobile':
case 'isIdCard':
case 'isMoney':
case 'isZip':
case 'isQQ':
case 'isInt':
case 'isEnglish':
case 'isChinese':
case 'isUrl':
case 'isDate':
case 'isDateOnlyYandM':
case 'isTime':
case 'isTwoPointInt':
case 'isPostcode':
case 'isNotNegativeFloat':
case 'isNotNegativeInt':
validResult = fv.checkReg(e, RegExps[curValidType], curErrorMsg);
break;
case 'regexp':
validResult = fv.checkReg(e, new RegExp(e.getAttribute('regexp'),
"g"), curErrorMsg);
break;
case 'custom':
validResult = eval(e.getAttribute('custom') + '(e,formElements)');
break;
default:
validResult = eval('fv.' + curValidType + '(e,formElements)');
break;
}
if (!validResult)
r.push(curErrorMsg);
}
return r;
}
String.prototype.trim = function() {
return this.replace(/^\s*|\s*$/g, "");
};
var RegExps = function() {
};
RegExps.isAreaCode = /0\d{2,3}/;
RegExps.isNumber = /^[-\+]?\d+(\.\d+)?$/;
RegExps.isEmail = /([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)/;
//RegExps.isPhone = /^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$/;
RegExps.isPhone = /^(\d{4}[-]?)?\d{8}$/;
RegExps.isMobile = /^1[0-9][0-9]\d{8}$/;
RegExps.isIdCard = /(^\d{15}$)|(^\d{17}[0-9Xx]$)/;
RegExps.isMoney = /^\d+(\.\d+)?$/;
RegExps.isZip = /^[1-9]\d{5}$/;
RegExps.isQQ = /^[1-9]\d{4,10}$/;
RegExps.isInt = /^[-\+]?\d+$/;
RegExps.isEnglish = /^[A-Za-z]+$/;
RegExps.isChinese = /^[\u0391-\uFFE5]+$/;
RegExps.isUrl = /^http[s]?:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$/;
RegExps.isDate = /^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29))$/;
RegExps.isTime = /^\d{4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2}:\d{1,2}$/;
RegExps.isDateOnlyYandM = /(^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29))$)|(^([0-9]{4}(\-){1}(([0]?[1-9]{1})|([1-9]{1})|([1]{1}[0-2]{1})))$)/;
RegExps.isTwoPointInt = /^\d+(\.\d{1,2})?$/;
RegExps.isPositive = /^(0|([1-9]\d*))(\.\d+)?$/;
RegExps.isPosInt = /^[0-9]*[1-9][0-9]*$/;
RegExps.isPostcode = /^[1-9][0-9]{5}$/;
RegExps.isNotNegativeFloat = /^\d+(\.\d+)?$/; //匹配非负浮点数(正浮点数 + 0)
RegExps.isNotNegativeInt = /^\d+$/; //匹配非负整数(正整数 + 0)
function isEmail(s) {
if (s.length > 100)
return false;
var regu = "^(([0-9a-zA-Z]+)|([0-9a-zA-Z]+[_.0-9a-zA-Z-]*[_.0-9a-zA-Z]+))@([a-zA-Z0-9-]+[.])+([a-zA-Z]{2}|net|NET|com|COM|gov|GOV|mil|MIL|org|ORG|edu|EDU|int|INT)$";
var re = new RegExp(regu);
if (s.search(re) != -1)
return true;
else
return false;
}
// 验证只能输入数字
function KeyPress(objTR) {
var key = event.keyCode;
if ((key < 48 || key > 57)) {
event.keyCode = 0;
}
}
// 限制只能输入数字和"-","."
function numKeyPress(objTR) {
var key = event.keyCode;
if (!(((key >= 48) && (key <= 57)) || (key == 13) || (key == 46) || (key == 45))) {
event.keyCode = 0;
}
}
// 限制只能输入数字和一个"."
function onlyNumAndDot(obj) {
var textval = obj.value;
var key = event.keyCode;
if (!(((key >= 48) && (key <= 57)) || (key == 46))) {
event.keyCode = 0;
} else {
if (!((key >= 48) && (key <= 57)) && textval.indexOf(".") > -1) {
event.keyCode = 0;
}
}
}
function doKeypress(obj) {
maxLength = obj.maxlength;
if (!isNaN(maxLength)) {
maxLength = parseInt(maxLength);
var oTR = obj.document.selection.createRange();
if (oTR.text.length >= 1)
event.returnValue = true;
else if (obj.value.length > maxLength - 1)
event.returnValue = false;
}
}
function doKeydown(obj) {
maxLength = obj.maxlength;
setTimeout(
function() {
maxLength = parseInt(maxLength);
if (!isNaN(maxLength)) {
if (obj.value.length > maxLength - 1) {
var oTR = window.document.selection.createRange();
oTR.moveStart("character", -1
* (obj.value.length - maxLength));
oTR.text = "";
}
}
}, 1);
}
function doBeforePaste(obj) {
maxLength = obj.maxlength;
if (!isNaN(maxLength))
event.returnValue = false;
}
function doPaste(obj) {
maxLength = obj.maxlength;
if (!isNaN(maxLength)) {
event.returnValue = false;
maxLength = parseInt(maxLength);
var oTR = obj.document.selection.createRange();
var iInsertLength = maxLength - obj.value.length + oTR.text.length;
var sData = window.clipboardData.getData("Text").substr(0,
iInsertLength);
oTR.text = sData;
}
}
function checkESC(va) {
var variable = va;
var str = variable;
if (variable.indexOf("<") > 0) {
str = variable.replace(/\") > 0) {
str = variable.replace(/\>/g, ">");
}
if (variable.indexOf("&") > 0) {
str = variable.replace(/\&/g, "&");
}
if (variable.indexOf("\"") > 0) {
str = variable.replace(/\"/g, """);
}
if (variable.indexOf("\'") > 0) {
str = variable.replace(/\'/g, "´");
}
return str;
}
/**
* 检查message的长度是否超过total,若超过,则截取并返回message的0~total的字串
*
* @param message
* @param total
*/
function countTextAreaLength(message, total) {
var max;
max = total;
if (message.value.length > max) {
message.value = message.value.substring(0, max);
}
}