/************************************************************************************* 程式功能 : 表單驗證工具 建置日期 : 2012-03-36 版本 : 1.0 版權所有 : 尚峪資訊科技有限公司 http://www.shang-yu.com.tw -------------------------------------------------------------------------------------- fromsAuth 表單元件驗證參數(fun) 函式 checkNull(jquery obj) : 驗證空白 checkNum(jquery obj) : 驗證數字 checkNumNull(jquery obj) : 驗證數字必填 checkEnNum(jquery obj) : 驗證英文數字 checkEnNumNull(jquery obj) : 驗證英文數字必填 checkPersonID(jquery obj) : 驗證身份證字號 checkPersonIDNull(jquery obj) : 驗證身份證字號必填 checkEmail(jquery obj) : 驗證電子信箱 checkEmailNull(jquery obj) : 驗證電子信箱必填 checkItems(jquery obj, jquery formObj) : 驗證核選方塊及選項方塊 checkSame(jquery obj, jquery formObj) : 驗證和checkSame欄位的值是否相同 checkSameNull(jquery obj, jquery formObj) : 驗證和checkSame欄位的值是否相同必填 checkEmailCellphoneNull(jquery obj) : 驗證只允許Email和手機格式必填 checkTarget(jquery obj) : 驗證本欄位與指定欄位,值是否一樣 返回值 PASS : 為驗證成功 ERROR : 為格式錯誤 NULL : 欄位空值 *************************************************************************************/ var check_tools = { _PASS: "PASS", _ERROR: "ERROR", _NULL: "NULL", _REPEAT: "REPEAT", _NOT_EQUAL: "NOT_EQUAL", _TARGET_ERROR: "TARGET_ERROR", checkNull: function($this){ //驗證空值 if($this.val() == ''){ return this._NULL; }; return this._PASS; }, checkNum: function($this){ //驗證數字 var number = "0123456789."; var string; for(var i = 0;i <= $this.val().length - 1;i++) { string = $this.val().substring(i,i + 1); if(number.indexOf(string) == -1) { return this._ERROR; }; }; return this._PASS; }, checkNumNull: function($this){ //驗證數字必填 //驗證空白 var ret = check_tools.checkNull($this); if(ret != this._PASS)return ret; var number = "0123456789."; var string; for(var i = 0;i <= $this.val().length - 1;i++) { string = $this.val().substring(i,i + 1); if(number.indexOf(string) == -1) { return this._ERROR; }; }; return this._PASS; }, checkHideNum: function($this){ //驗證數字 (隱碼) var number = "0123456789.*"; var string; for(var i = 0;i <= $this.val().length - 1;i++) { string = $this.val().substring(i,i + 1); if(number.indexOf(string) == -1) { return this._ERROR; }; }; return this._PASS; }, checkEnNum: function($this){ //驗證英文數字 var number = "00123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_+@."; var string; for(var i = 0;i <= $this.val().length - 1;i++) { string = $this.val().substring(i,i + 1); if(number.indexOf(string) == -1) { return this._ERROR; }; }; return this._PASS; }, checkEnNumNull : function($this){ //驗證英文數字必填 //驗證空白 var ret = check_tools.checkNull($this); if(ret != this._PASS)return ret; var number = "00123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_+@."; var string; for(var i = 0;i <= $this.val().length - 1;i++) { string = $this.val().substring(i,i + 1); if(number.indexOf(string) == -1) { return this._ERROR; }; }; return this._PASS; }, checkNameEn: function($this){ //驗證英文 var number = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-.&, "; var string; for(var i = 0;i <= $this.val().length - 1;i++) { string = $this.val().substring(i,i + 1); if(number.indexOf(string) == -1) { return this._ERROR; }; }; return this._PASS; }, checkPersonID: function($this){ //驗證身份證字號 function checkID(value) { var id = value.toUpperCase(); var alphabet = "ABCDEFGHJKLMNPQRSTUVXYWZIO"; if (id.match(/^[A-Z](1|2)\d{8}$/i) == null && id.match(/^[A-Z][89A-D]\d{8}$/i) == null) { //格式錯誤 return false; } var chrarr = id.split(""); var num; if (id.match(/^[A-Z][A-D]\d{8}$/i) != null) { num = alphabet.indexOf(chrarr[1]) % 10; chrarr[1] = num; } num = alphabet.indexOf(chrarr[0]) + 10; var d1 = num % 10; var d2 = ((num - d1) / 10); chrarr[0] = (d1 * 9 + d2) % 10; var logicsum = chrarr[0]; for (var index = 1; index < 9; index++) logicsum += chrarr[index] * (9 - index); if ((10 - logicsum % 10) % 10 == chrarr[9]) { //格式正確 return true; } else { //格式錯誤 return false; } } var ret = checkID($this.val()); if(ret){ return this._PASS; } else{ return this._ERROR } }, checkHidePersonID: function($this){ //驗證身份證字號 if($this.val() && $this.val().indexOf('*') == '-1'){ return this.checkPersonID($this); }; return this._PASS; }, checkPersonIDNull: function($this){ //驗證身份證字號必填 //驗證空白 var ret = check_tools.checkNull($this); if(ret != this._PASS)return ret; function checkID(value) { var id = value.toUpperCase(); var alphabet = "ABCDEFGHJKLMNPQRSTUVXYWZIO"; if (id.match(/^[A-Z](1|2)\d{8}$/i) == null && id.match(/^[A-Z][89A-D]\d{8}$/i) == null) { //格式錯誤 return false; } var chrarr = id.split(""); var num; if (id.match(/^[A-Z][A-D]\d{8}$/i) != null) { num = alphabet.indexOf(chrarr[1]) % 10; chrarr[1] = num; } num = alphabet.indexOf(chrarr[0]) + 10; var d1 = num % 10; var d2 = ((num - d1) / 10); chrarr[0] = (d1 * 9 + d2) % 10; var logicsum = chrarr[0]; for (var index = 1; index < 9; index++) logicsum += chrarr[index] * (9 - index); if ((10 - logicsum % 10) % 10 == chrarr[9]) { //格式正確 return true; } else { //格式錯誤 return false; } } var ret = checkID($this.val()); if(ret){ return this._PASS; } else{ return this._ERROR } }, checkEmail: function($this){ //驗證電子信箱 var str_pos = $this.val().indexOf("@"); var str_pos1 = $this.val().indexOf("."); var str_len = $this.val().length; if(str_len <= 0) { return this._PASS; }; var chk_str = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-_*"; if(str_pos != -1 && str_pos1 != -1) { for(var i= 0;i <= str_pos - 1;i++) { if(chk_str.indexOf($this.val().substring(i,i+1)) == -1) { return this._ERROR; }; }; for(var i= str_pos + 1;i <= $this.val().length - 1;i++) { if(chk_str.indexOf($this.val().substring(i,i+1)) == -1) { return this._ERROR; }; }; return this._PASS; }; return this._ERROR; }, checkEmailNull: function($this){ //驗證電子信箱必填 //驗證空白 var ret = check_tools.checkNull($this); if(ret != this._PASS)return ret; var str_pos = $this.val().indexOf("@"); var str_pos1 = $this.val().indexOf("."); var str_len = $this.val().length; if(str_len <= 0) { return this._PASS; }; var chk_str = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-_*"; if(str_pos > 0 && str_pos1 != -1) { for(var i= 0;i <= str_pos - 1;i++) { if(chk_str.indexOf($this.val().substring(i,i+1)) == -1) { return this._ERROR; }; }; for(var i= str_pos + 1;i <= $this.val().length - 1;i++) { if(chk_str.indexOf($this.val().substring(i,i+1)) == -1) { return this._ERROR; }; }; return this._PASS; }; return this._ERROR; }, checkItems: function($this, $form){ //驗證核選方塊及選項方塊 if($form.find("[name=" + $this.attr('name') + "]:checked").size() == 0){ return this._NULL; } return this._PASS; }, checkSame: function($this, $form){ //驗證值是否相同 var ret = ""; $form.find("[checkSame = 'true']").each(function(){ if($this.val() != $(this).val()){ ret = check_tools._ERROR; }; }); if(ret == this._ERROR) return ret; else return this._PASS; }, checkSameNull: function($this, $form){ //驗證值是否相同並必填 //驗證空白 var ret = check_tools.checkNull($this); if(ret != this._PASS)return ret; var ret = ""; $form.find("[checkSame = 'true']").each(function(){ if($this.val() != $(this).val()){ ret = check_tools._ERROR; }; }); if(ret == this._ERROR) return ret; else return this._PASS; }, checkNullOne: function($this, $form){ var ret1 = check_tools.checkNull($this); var ret2 = check_tools.checkNull($form.find("#" + $this.attr('one')) ); if(ret1 == this._PASS || ret2 == this._PASS){ return this._PASS; } else{ return ret1; } }, checkNum_0: function($this){ //判斷大於0的數字 var ret = check_tools.checkNum($this); if(ret != this._PASS)return ret; if($this.val() < 1 && $this.val() != ''){ return this._ERROR; } return this._PASS; }, checkNumNull_0: function($this){ //判斷大於0的數字必填 var ret = check_tools.checkNumNull($this); if(ret != this._PASS)return ret; if($this.val() < 1){ return this._ERROR; } return this._PASS; }, checkNum_100: function($this){ //判斷0~100數字 var ret = check_tools.checkNum($this); if(ret != this._PASS)return ret; if(($this.val() > 100) && $this.val() != ''){ return this._ERROR; } return this._PASS; }, checkNumNull_100: function($this){ //判斷0~100數字必填 var ret = check_tools.checkNumNull($this); if(ret != this._PASS)return ret; if($this.val() > 100){ return this._ERROR; } return this._PASS; }, checkEmailCellphoneNull: function($this){ var ret_null = this.checkNull($this); // var ret1 = this.checkNumNull($this); var ret2 = this.checkEmailNull($this); if(ret_null == this._NULL){ return this._NULL } else if(ret_null == this._PASS || ret2 == this._PASS){ return this._PASS; } else{ return this._ERROR; } }, checkCellphone:function($this){ var ret_null = this.checkNull($this); if(ret_null == this._NULL){ return this._NULL } var ret = this.checkNumNull($this), ERROR = this._ERROR, PASS = this._PASS, REPEAT = this._REPEAT, str_len = $this.val().length; if(str_len >= 7){ return ret; }else{ return this._ERROR } }, isValidGUINull:function($this) { //驗證空白 var ret = check_tools.checkNull($this); if(ret != this._PASS)return ret; var taxId = $this.val(); var invalidList = "00000000,11111111"; if (/^\d{8}$/.test(taxId) == false || invalidList.indexOf(taxId) != -1) { return this._ERROR; } var validateOperator = [1, 2, 1, 2, 1, 2, 4, 1], sum = 0, calculate = function(product) { var ones = product % 10, tens = (product - ones) / 10; return ones + tens; }; for (var i = 0; i < validateOperator.length; i++) { sum += calculate(taxId[i] * validateOperator[i]); } if(sum % 10 == 0 || (taxId[6] == 7 && (sum + 1) % 10 == 0)){ return this._PASS; } else{ return this._ERROR; }; }, checkInvo:function($this) { var str_len = $this.val().length; if(str_len <= 0) { return this._PASS; }; var chk_str = /^\/{1}[A-Za-z0-9+-.]{7}$/; if(str_len == 8 && chk_str.test($this.val())) { return this._PASS; }else{ return this._ERROR; } }, checkInvoNull:function($this) { //驗證空白 var ret = check_tools.checkNull($this); var str_len = $this.val().length; if(ret != this._PASS)return ret; var chk_str = /^\/{1}[A-Za-z0-9+-.]{7}$/; if(str_len == 8 && chk_str.test($this.val())) { return this._PASS; }else{ return this._ERROR; } }, checkNature:function($this) { var str_len = $this.val().length; if(str_len <= 0) { return this._PASS; }; var chk_str = /^[a-zA-Z]{2}\d{14}$/; if(str_len == 16 && chk_str.test($this.val())) { return this._PASS; }else{ return this._ERROR; } }, checkNatureNull:function($this) { //驗證空白 var ret = check_tools.checkNull($this); var str_len = $this.val().length; if(ret != this._PASS)return ret; var chk_str = /^[a-zA-Z]{2}\d{14}$/; if(str_len == 16 && chk_str.test($this.val())) { return this._PASS; }else{ return this._ERROR; } }, checkInvoNullSame:function($this,$form) { //驗證空白 var ret = check_tools.checkInvoNull($this); if(ret != this._PASS)return ret; var ret = ""; $form.find("[checkInvoSame = 'true']").each(function(){ if($this.val() != $(this).val()){ ret = check_tools._ERROR; }; }); if(ret == this._ERROR) return ret; else return this._PASS; }, checkNatureNullSame:function($this,$form) { //驗證空白 var ret = check_tools.checkNatureNull($this); if(ret != this._PASS)return ret; var ret = ""; $form.find("[checkInvoSame = 'true']").each(function(){ if($this.val() != $(this).val()){ ret = check_tools._ERROR; }; }); if(ret == this._ERROR) return ret; else return this._PASS; }, //台灣手機 checkTaiwanCell:function($this,$form) { //驗證空白 var ret = check_tools.checkNull($this); var str_len = $this.val().length; if(ret != this._PASS)return ret; var chk_str = /^09[0-9]{8}$/; if(str_len == 10 && chk_str.test($this.val())) { return this._PASS; }else{ return this._ERROR; } }, //收件人姓名 checkNameNull:function($this,$form) { //驗證空白 var ret = check_tools.checkNull($this); if(ret != this._PASS)return ret; var c = $this.val(); var n = c.length,s; var len = 0; for(var i=0; i 0 ) { len++; s = s >> 8; } } if(len >= 2 && len <= 10) { return this._PASS; }else{ return this._ERROR; } }, //確定兩欄位是否等值,target 拿來當指定欄位 checkTarget:function($this,$form) { //與指定欄位,值是否一樣 if($form.find('[name="'+$this.attr('target')+'"]').eq(0).length > 0){ if($this.val() == $form.find('[name="'+$this.attr('target')+'"]').eq(0).val()){ return this._PASS; }else{ return this._NOT_EQUAL; } }else{ return this._TARGET_ERROR; } }, //驗證密碼 需同時包含大寫字母、小寫字母、數字各一、長度須為6碼以上 checkPwdNull:function($this){ //驗證空白 var ret = check_tools.checkNull($this); if(ret != this._PASS)return ret; var number = "00123456789"; var lower = "abcdefghijklmnopqrstuvwxyz"; var upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; var string; var str_len = $this.val().length; //判斷是否有大寫字母、小寫字母、數字 var chk_number = false; var chk_lower = false; var chk_upper = false; for(var i = 0;i <= str_len - 1;i++) { string = $this.val().substring(i,i + 1); if(number.indexOf(string) != -1) { chk_number = true; }; if(lower.indexOf(string) != -1) { chk_lower = true; }; if(upper.indexOf(string) != -1) { chk_upper = true; }; }; if(chk_number && chk_lower && chk_upper && str_len >= 6){ return this._PASS; }else{ return this._ERROR; } }, checkChar7: function($this){ //驗證7個字元以上 var str_len = $this.val().length; if(str_len > 0 && str_len < 7){ return this._ERROR; } return this._PASS; }, //驗證帳號,英數字8至20字元 checkAccountNull: function($this){ //驗證空白 var ret = check_tools.checkNull($this); if(ret != this._PASS)return ret; var str_len = $this.val().length; if(str_len < 8 || str_len > 20){ return this._ERROR; } var number = "00123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ@._-"; var string; for(var i = 0;i <= $this.val().length - 1;i++) { string = $this.val().substring(i,i + 1); if(number.indexOf(string) == -1) { return this._ERROR; }; }; return this._PASS; }, //確認姓名 checkNameNull:function($this) { var PASS = this._PASS, ERROR = this._ERROR, result = ''; //驗證空白 var ret = check_tools.checkNull($this); if(ret != PASS)return ret; $.ajax({ url:"/ajax/ajax_check_name.php", type:"POST", cache:false, async:false, data:{name:$this.val()}, error:function(d){ alert("網路連線過慢網頁請重新整理"); }, success:function(d){ if(d == 'OK'){ result = PASS; }else{ result = ERROR; } } }); return result; }, checkTel: function($this){ //驗證電話 var str_len = $this.val().length; if(str_len > 0 && str_len < 7){ return this._ERROR; } var number = "00123456789"; var string; for(var i = 0;i <= $this.val().length - 1;i++) { string = $this.val().substring(i,i + 1); if(number.indexOf(string) == -1) { return this._ERROR; }; }; return this._PASS; }, checkOfficeTel: function($this){ //驗證公司電話 var number = "0123456789-*"; var arr = $this.val().split('-'); var string; if(arr.length > 2){ return this._ERROR; } for(var i = 0;i <= $this.val().length - 1;i++) { string = $this.val().substring(i,i + 1); if(number.indexOf(string) == -1) { return this._ERROR; }; }; return this._PASS; }, checkOfficeTelExt: function($this){ //驗證分機 var number = "00123456789,"; var string; for(var i = 0;i <= $this.val().length - 1;i++) { string = $this.val().substring(i,i + 1); if(number.indexOf(string) == -1) { return this._ERROR; }; }; return this._PASS; }, checkAddress: function($this){ //驗證地址 var number = '~!@#$%^&*{}|[]\'"<>?+='; var string; for(var i = 0;i <= $this.val().length - 1;i++) { string = $this.val().substring(i,i + 1); if(number.indexOf(string) >= 0) { return this._ERROR; }; }; return this._PASS; }, checkAddressNull: function($this){ //驗證地址 var PASS = this._PASS; var ret = check_tools.checkNull($this); if(ret != PASS)return ret; var number = '~!@#$%^&*{}|[]\'"<>?+='; var string; for(var i = 0;i <= $this.val().length - 1;i++) { string = $this.val().substring(i,i + 1); if(number.indexOf(string) >= 0) { return this._ERROR; }; }; return this._PASS; }, checkEnName: function($this){ //英文姓名 var number = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-,'; var string; for(var i = 0;i <= $this.val().length - 1;i++) { string = $this.val().substring(i,i + 1); if(number.indexOf(string) == -1) { return this._ERROR; }; }; return this._PASS; } };