天天看點

jquery 通用表單驗證

主要用到了jquery,以及自定義的一個屬性wl_check,屬性說明如下:

1、文法

 [need:true,type:int,maxlen:15,minlen:2]

2、關鍵字

 need:文本輸入框的必填限制

 regtype:文本輸入框的正規表達式類别驗證

 minlen:文本輸入框的最小輸入長度

 maxlen:文本輸入框的最大輸入長度

 minval:數字型文本輸入框的最值

 maxval:數字型文本輸入框的最值

 notval:下拉框的必選設定

 minselect:單複選框的最少選項數

 maxselect:單複選框的最多選項數

 sequence:預設從100--1000,如果需要打亂頁面控件順序可設定值,<100 或 >1000,按從小到大驗證

 group:【group:txtArea-1-1】其中“txtArea”是pre控件值,“-1-1”表示最少填寫一個,最多填寫一個。

 manage:可以設定與某一控件的關系“= != > < >= <= + -”

 ...

3、使用範圍

 input:text

 input:radio 注意id為'_i'

 input:checkbox 注意id為'_i'

 textarea

 select

4、描述

a、在有wl_check屬性的表單控件值發生變化時會自行調用相應的驗證方法,該方法無傳回值,隻是出錯提示并定位。

b、在頁面post時需要先對某一域内有wl_check屬性的表單控件進行驗證,通過傳回true;否則彈出提示資訊并取消送出。

5、使用示例-見demo

        <input type="text" id="name" value='dd' title='姓名' wl_check="need:true,minlen:2,maxlen:10,sequence:1" />

 表示該文本框必填,并且最多10個字,最少2各個字

完全驗證代碼

/**********************************************************************/

/*目前版本1.1*/

/*linfeng-林峰|2010-04-編寫與上海浦東|用于:表單驗證【該行請勿删除】*/

/*linfeng-林峰|2010-08-12-修改*/

/**********************************************************************/

/*表單驗證解析器*/

/*隐藏及不在頁面顯示的控件不進行驗證*/

function formCheck(domid) {

var obj = new formcheckparse(domid, "check");

return obj.check();

}

/*控件onblur事件時處罰*/

/*單個控件onblur事件不執行為空判斷*/

function blurCheck(domid) {

$("input:text[wl_check]").each(function(i) {

$(this).blur(function() { var obj = new formcheckparse(domid, "blur"); obj.blurcheck($(this)); });

});

$("textarea[wl_check]").each(function(i) {

$(this).blur(function() { var obj = new formcheckparse(domid, "blur"); obj.blurcheck($(this)); });

});

$("input:password[wl_check]").each(function(i) {

$(this).blur(function() { var obj = new formcheckparse(domid, "blur"); obj.blurcheck($(this)); });

});

}

/*-----------------------------------------------------------------------------------------*/

/*以下為封裝腳本-僅供學習*/

/*-----------------------------------------------------------------------------------------*/

jQuery(formcheckparse = function(domid, ctype) {

this.author = "linfeng-林峰|2010-04-編寫與上海浦東|用于:表當驗證【該行請勿删除】";

this.domid = domid;

this.blurcheck = function(obj) {/*控件onblur事件時處罰*/

obj.val($.trim(obj.val())); /*去掉開始結束的空格alert(obj.attr('wl_check')); alert(obj.val());*/

var my_array = obj.attr('wl_check').split(','); /*目前處理控件的驗證鍵值組*/

match(obj, my_array);

};

this.check = function() {

var arr_control = new Array();

/*排序字段預設從100開始到1000結束,如果需要附加排序請記住該規則,可以設定<100或>1000*/

function MyObjectControls(_obj, _sequence, _group, _manage) {

this.control = _obj;

this.sequence = _sequence;

this.group = _group;

this.manage = _manage;

}

var returnValue = true;

$("#" + this.domid + " input:text[wl_check]:visible").each(function(i) {

$(this).val($.trim($(this).val())); /*去掉開始結束的空格*/

arr_control.push($(this));

}); /*驗證輸入框*/

$("#" + this.domid + " textarea[wl_check]:visible").each(function(i) {

$(this).val($.trim($(this).val())); /*去掉開始結束的空格*/

arr_control.push($(this));

}); /*驗證多行輸入框*/

$("#" + this.domid + " input:password[wl_check]:visible").each(function(i) {

$(this).val($.trim($(this).val())); /*去掉開始結束的空格*/

arr_control.push($(this));

}); /*驗證密碼輸入框*/

$("#" + this.domid + " select[wl_check]:visible").each(function(i) {

arr_control.push($(this));

}); /*驗證下拉框*/

$("#" + this.domid + " span[wl_check]:visible").each(function(i) {

arr_control.push($(this));

}); /*驗證單複選框*/

$("#" + this.domid + " table[wl_check]:visible").each(function(i) {

arr_control.push($(this));

}); /*驗證單複選框*/

if (arr_control.length > 0) {

/*20100813-增加控件的排序*/

/*20100813-增加控件的分組*/

/*20100813-增加控件的受控*/

var arrMyObjectControls = new Array();

var arrMyObjectGroups = new Array();

var arrMyObjectBeManages = new Array();

/*設定排序值*/

for (var i = 0; i < arr_control.length; i++) {

/*20100813-排序*/

var thisSequence = gettypevalue(arr_control[i], 'sequence', i + 100);

/*20100813-分組*/

var thisGroup = gettypevalue(arr_control[i], 'group', '');

/*20100813-受控*/

var thisManage = gettypevalue(arr_control[i], 'manage', '');

/*調試點:alert(thisSequence);*/

var newMyObjectControls = new MyObjectControls(arr_control[i], thisSequence,thisGroup,thisManage);

/*将分組的控件放入數組*/

if(thisGroup.length>0){

arrMyObjectGroups.push(newMyObjectControls);

}

/*将受控的控件放入數組*/

if(thisManage.length>0){

arrMyObjectBeManages.push(newMyObjectControls);

}

arrMyObjectControls.push(newMyObjectControls);

}

/*冒泡排序-按排序逆序*/

var len = arrMyObjectControls.length;

/*調試點:alert(len);*/

for (var i = 0; i < len; i++) {

var boolchg = false;

for (var j = 0; j < len - 1; j++) {

var One = arrMyObjectControls[j];

var Two = arrMyObjectControls[j + 1];

/*調試點:alert(arrMyObjectControls[j].sequence+'|'+j);*/

if (parseInt(One.sequence) > parseInt(Two.sequence)) {

arrMyObjectControls[j] = Two; arrMyObjectControls[j + 1] = One; boolchg = true;

}

}

if (!boolchg) break;

}

/*周遊驗證*/

for (var i = 0; i < arrMyObjectControls.length; i++) {

/*調試點:alert(arrMyObjectControls[i].sequence);*/

var my_array = arrMyObjectControls[i].control.attr('wl_check').split(','); /*目前處理控件的驗證鍵值組*/

/*if (this.author.indexOf('lin') == -1 || this.author.indexOf('林') == -1) return true;*/

returnValue = match(arrMyObjectControls[i].control, my_array); if (!returnValue) return returnValue;

/*分組測試-調試點:alert(arrMyObjectControls[i].group+'|'+arrMyObjectControls[i].control.attr('id'));*/

if(arrMyObjectControls[i].group.length>1 && arrMyObjectControls[i].group.indexOf(arrMyObjectControls[i].control.attr('id'))!=-1){

returnValue = grouptest(arrMyObjectControls, arrMyObjectGroups,i); if (!returnValue) return returnValue;

}

/*受控測試-調試點:alert(arrMyObjectControls[i].manage+'|'+arrMyObjectControls[i].control.attr('id'));*/

if(arrMyObjectControls[i].manage.length>1 && arrMyObjectControls[i].manage.indexOf(arrMyObjectControls[i].control.attr('id'))!=-1){

returnValue = managetest(arrMyObjectControls,i); if (!returnValue) return returnValue;

}

}

}

return returnValue;

};

/**私有函數**/

match = function(obj, my_array) {/*私有方法-解析驗證方式*/

var returnValue = true; /*alert(obj.attr('wl_check'));alert(my_array.length);*/

if (my_array.length > 0) {

for (var i = 0; i < my_array.length; i++) {

var my_array_items = new Array();

my_array_items = my_array[i].split(':');

if (my_array_items.length > 1) {

returnValue = matchItem(obj, my_array, my_array_items[0], my_array_items[1]);

}

if (!returnValue) break;

}

}

return returnValue;

};

grouptest = function(_arrControls, _arrGroups, _i) {/*私有方法-分組測試*/

var arrGroup = _arrControls[_i].group.split('-');

var minGroup = arrGroup[1];

var maxGroup = arrGroup[2];

var nowGroup = 0;

var infoGroup = '“';

for (var k = 0; k < _arrGroups.length; k++) {

if(_arrGroups[k].group==_arrControls[_i].group){

infoGroup += _arrGroups[k].control.attr('title')+'、';

if(_arrGroups[k].control.val().length>0){

nowGroup++;

}

}

}

infoGroup += '”';

infoGroup =infoGroup.split( '、”').join('”');

if(nowGroup<minGroup){

alert(infoGroup+'中至少要填寫'+ minGroup +'項!');

_arrControls[_i].control.focus();

return false;

}

if(nowGroup>maxGroup){

alert(infoGroup+'中最多填寫'+ maxGroup +'項!');

_arrControls[_i].control.focus();

return false;

}

return true;

};

managetest = function(_arrControls, _i) {/*私有方法-受控測試*/

var manage_type = '+';

var arrManage = null;

if(_arrControls[_i].manage.indexOf('-')!=-1){

manage_type = '-';

arrManage = _arrControls[_i].manage.split('-');

}

else if(_arrControls[_i].manage.indexOf('-')!=-1){

manage_type = '+';

arrManage = _arrControls[_i].manage.split('+');

}

else if(_arrControls[_i].manage.indexOf('!=')!=-1){

manage_type = '!=';

arrManage = _arrControls[_i].manage.split('!=');

}

else if(_arrControls[_i].manage.indexOf('=')!=-1){

manage_type = '=';

arrManage = _arrControls[_i].manage.split('=');

}

else if(_arrControls[_i].manage.indexOf('>=')!=-1){

manage_type = '>=';

arrManage = _arrControls[_i].manage.split('>=');

}

else if(_arrControls[_i].manage.indexOf('<=')!=-1){

manage_type = '<=';

arrManage = _arrControls[_i].manage.split('<=');

}

else if(_arrControls[_i].manage.indexOf('>')!=-1){

manage_type = '>';

arrManage = _arrControls[_i].manage.split('>');

}

else if(_arrControls[_i].manage.indexOf('<')!=-1){

manage_type = '<';

arrManage = _arrControls[_i].manage.split('<');

}

var nowManage = 0;

var aManage =$('#'+arrManage[0]);

var bManage =$('#'+arrManage[1]);

var infoManage = aManage.attr('title')+'、'+bManage.attr('title');

/*測試點:alert(infoManage);*/

if(aManage.val().length>0){

nowManage++;

}

if(bManage.val().length>0){

nowManage++;

}

if(manage_type == '+' && nowManage==1){

alert(infoManage+'必須同時填寫!');

_arrControls[_i].control.focus();

return false;

}

else if(manage_type == '-' && nowManage==2){

alert(infoManage+'至多填寫一項!');

_arrControls[_i].control.focus();

return false;

}

else if(manage_type == '-' && nowManage==0){

alert(infoManage+'至少填寫一項!');

_arrControls[_i].control.focus();

return false;

}

else if(manage_type == '!=' && aManage.val()==bManage.val()){

alert(infoManage+'輸入值不可以一樣!');

_arrControls[_i].control.focus();

return false;

}

else if(manage_type == '=' && aManage.val()!=bManage.val()){

alert(infoManage+'輸入值必須一樣!');

_arrControls[_i].control.focus();

return false;

}

else if(manage_type == '>=' && aManage.val()<bManage.val()){

alert(aManage.attr('title')+'必須不小于'+bManage.attr('title')+'!');

_arrControls[_i].control.focus();

return false;

}

else if(manage_type == '<=' && aManage.val()>bManage.val()){

alert(aManage.attr('title')+'必須不大于'+bManage.attr('title')+'!');

_arrControls[_i].control.focus();

return false;

}

else if(manage_type == '>' && aManage.val()<=bManage.val()){

alert(aManage.attr('title')+'必須大于'+bManage.attr('title')+'!');

_arrControls[_i].control.focus();

return false;

}

else if(manage_type == '<' && aManage.val()>=bManage.val()){

alert(aManage.attr('title')+'必須小于'+bManage.attr('title')+'!');

_arrControls[_i].control.focus();

return false;

}

return true;

};

gettypevalue = function(_control, _type, _defaultValue) {/*私有方法-擷取自定義屬性值,預設100*/

var returnValue = _defaultValue;

var my_array = _control.attr('wl_check').split(',');

if (my_array.length > 0 && _control.attr('wl_check').indexOf(_type + ':') != -1) {

for (var i = 0; i < my_array.length; i++) {

if (my_array[i].indexOf(_type + ':') != -1) {

var my_array_items = new Array();

my_array_items = my_array[i].split(':');

if (my_array_items.length > 0) {

returnValue = my_array_items[1];

}

}

}

}

return returnValue;

};

getinfo = function(my_array) {/*私有方法-擷取自定義提示資訊*/

var returnInfo = ""; /*alert(my_array.join(','));*/

if (my_array.length > 0 && my_array.join(',').indexOf('info:') != -1) {

for (var i = 0; i < my_array.length; i++) {

if (my_array[i].indexOf('info:') != -1) {

var my_array_items = new Array();

my_array_items = my_array[i].split(':');

if (my_array_items.length > 0) {

returnInfo = my_array_items[1];

}

}

}

} /*alert(returnInfo);*/

return returnInfo;

};

matchItem = function(obj, my_array, key, val) {/*私有方法-項目驗證*/

var boolReturn = true; /*alert(obj.attr('wl_check'));alert(key);*/

switch (key) {

case 'need':

boolReturn = isEmpity(obj, my_array);

break;

case 'regtype':

boolReturn = isRegMatch(obj, my_array, key, val);

break;

case 'minlen':

boolReturn = isTooShort(obj, my_array, key, val);

break;

case 'maxlen':

boolReturn = isTooLong(obj, my_array, key, val);

break;

case 'minval':

boolReturn = isTooMin(obj, my_array, key, val);

break;

case 'maxval':

boolReturn = isTooMax(obj, my_array, key, val);

break;

case 'notselect':

boolReturn = isNotSelect(obj, my_array, key, val);

break;

case 'minselect':

boolReturn = isTooMinSelect(obj, my_array, key, val);

break;

case 'maxselect':

boolReturn = isTooMaxSelect(obj, my_array, key, val);

break;

default:

break;

}

return boolReturn;

};

isTooMinSelect = function(obj, my_array, key, val) {/*OK--私有方法-是否選擇了過多項*/

var boolReturn = true; /*alert(obj.attr('wl_check'));alert(obj.attr('id'));*/

var _count = getSelectCount(obj.attr('id'));

if (_count < val) {

var info = getinfo(my_array);

if (info == '') info = obj.attr('title') + "至少選擇" + val + "項!";

alert(info);

obj[0].focus();

boolReturn = false;

}

return boolReturn;

};

isTooMaxSelect = function(obj, my_array, key, val) {/*OK--私有方法-是否選擇了過多項*/

var boolReturn = true; /*alert(obj.attr('wl_check'));alert(obj.val());*/

var _count = getSelectCount(obj.attr('id'));

if (_count > val) {

var info = getinfo(my_array);

if (info == '') info = obj.attr('title') + "最多選擇" + val + "項!";

alert(info);

obj[0].focus();

boolReturn = false;

}

return boolReturn;

};

getSelectCount = function(spanid) {/*OK--私有方法-傳回某一域内單選複選框已選擇個數*/

var intReturn = 0; /*alert($("#"+spanid+" input").length);alert(spanid);*/

$("#" + spanid + " input[type=checkbox]").each(function(i) {

if (this.checked) intReturn++;

});

$("#" + spanid + " input[type=radio]").each(function(i) {

if (this.checked) intReturn++;

});

return intReturn;

};

isNotSelect = function(obj, my_array, key, val) {/*OK--私有方法-是否選擇了預設值*/

var boolReturn = true; /*alert(obj.attr('wl_check'));alert(obj.val());*/

if (obj.val() == val) {

var info = getinfo(my_array);

if (info == '') info = "請選擇" + obj.attr('title') + "!";

alert(info);

obj[0].focus();

boolReturn = false;

}

return boolReturn;

};

isRegMatch = function(obj, my_array, key, val) {/*OK--私有方法-是否太小*/

var boolReturn = true; /*alert(obj.attr('wl_check'));alert(obj.val() + '|' + val);*/

var crReturn = cregMatch(obj.val(), val) + '';

if (crReturn.toLowerCase() == 'false') {

var info = getinfo(my_array);

if (info == '') info = obj.attr('title') + "格式錯誤,請準确輸入!";

alert(info);

obj[0].focus();

boolReturn = false;

}

return boolReturn;

};

isTooMin = function(obj, my_array, key, val) {/*OK--私有方法-是否太小*/

var boolReturn = true; /*alert(obj.attr('wl_check'));*/

if (boolReturn && parseFloat(obj.val()) < parseFloat(val)) {

var info = getinfo(my_array);

if (info == '') info = obj.attr('title') + "輸入值太小,最小值為" + val + "!";

alert(info);

obj[0].focus();

boolReturn = false;

}

return boolReturn;

};

isTooMax = function(obj, my_array, key, val) {/*OK--私有方法-是否太大*/

var boolReturn = true; /*alert(obj.attr('wl_check'));*/

if (boolReturn && parseFloat(obj.val()) > parseFloat(val)) {

var info = getinfo(my_array);

if (info == '') info = obj.attr('title') + "輸入值太大,最大值為" + val + "!";

alert(info);

obj[0].focus();

boolReturn = false;

}

return boolReturn;

};

isTooLong = function(obj, my_array, key, val) {/*OK--私有方法-是否太長*/

var boolReturn = true; /*alert(obj.attr('wl_check'));*/

if (boolReturn && obj.val().length > val) {

var info = getinfo(my_array);

if (info == '') info = obj.attr('title') + "輸入值太長,請最多輸入" + val + "個字!";

alert(info);

obj[0].focus();

boolReturn = false;

}

return boolReturn;

};

isTooShort = function(obj, my_array, key, val) {/*OK--私有方法-是否太短*/

var boolReturn = true; /*alert(obj.attr('wl_check'));*/

if (boolReturn && obj.val().length < val) {

var info = getinfo(my_array);

if (info == '') info = obj.attr('title') + "輸入值太短,請至少輸入" + val + "個字!";

alert(info);

obj[0].focus();

boolReturn = false;

}

return boolReturn;

};

isEmpity = function(obj, my_array) {/*OK--私有方法-是否為空*/

var boolReturn = true; /*alert(obj.attr('wl_check'));alert(ctype);*/

if (boolReturn && ctype != 'blur' && obj.val() == "") {

var info = getinfo(my_array);

if (info == '') info = obj.attr('title') + "不可為空!";

alert(info);

obj[0].focus();

boolReturn = false;

}

if (ctype == 'blur' && obj.val() == "") return false;

return boolReturn;

};

cregMatch = function(str, type) {/*私有方法-正規表達式驗證*/

str = str.toLowerCase(); /*alert(str + '|' + type);*/

var re = null;

re = /[/x00-/xff]/g;

if (type == 'money') {

re = /^(([1-9][0-9]*/.[0-9]+)|([0]/.[0-9]*[1-9]+[0-9]*)|([1-9][0-9]*)|0)$/g; //金錢、包括0

}

else if (type == 'uname') {

re = /^(/w{3,})$/g; //使用者名

}

else if (type == 'int') {

re = /^(([1-9][0-9]*)|0)$/g; //正整數+0

}

else if (type == 'idcard') {

if (str.length != 15 && str.length != 18) return false;

re = /^([0-9]/d{5})(((([1][9])?)/d{2})|([2]/d{3}))(([1][0-2])|([0][1-9]))(([0-2][1-9])|([1-3][0])|31)(/d{2,3}([x]|[0-9]))$/g; //簡易驗證身份證

}

else if (type == 'info') {

re = /^(([^x]|[x])*[/u4E00-/u9FA5]+([^x]|[x])*)$/g; //必須有漢字

}

else if (type == 'percent') {

re = /^(([1-9][0-9]?/.[0-9]{1,3})|([0]/.[0-9]{0,2}[1-9])|([0]/.[1-9][0-9]{0,2})|([0]/.[0-9][1-9][0-9])|([1-9][0-9]?)|0|100)$/g;

}

else if (type == 'emil') {

re = /^(/w+([-+.']/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)*)$/g;

}

else if (type == 'mobile') {

re = /^([1][3|5]/d{9})$/g;

}

else if (type == 'timeymd') {

re = /^((((([1][9])|([2][0]))?)/d{2})/-(([1][0-2])|([0][1-9])|[1-9])/-(([0-2][1-9])|([1-3][0])|31|[1-9]))$/g; //時間

}

else if (type == 'checkcode4') {

re = /^(/d{4})$/g;

}

else if (type == 'age_2') {

re = /^([1-9][0-9]?)$/g;

}

else if (type == 'int_3') {

re = /^([1-9][0-9]{0,2})$/g;

}

else if (type == 'int_4') {

re = /^([1-9][0-9]{2,3})$/g;

}

else if (type == 'zipcode') {

re = /^(/d{6})$/g;

}

else if (type.length >0) {

type=type.split(';').join(',');

re = new RegExp(type, "ig");

}

return str.match(re) ? true : false;

};

}

);