/** * ======================================================== 有關字串 ======================================================== */ jQuery.validator.addMethod( 'isYearMonthWithSlashValidate', function( value, element ){ return this.optional( element ) || value.isYearMonthWithSlashValidate(); }, jQuery.validator.format( '日期格式錯誤(yyy/MM)' ) ); jQuery.validator.addMethod( 'isYearMonthWithSlashValidateExcludeZeroNine', function( value, element ){ return this.optional( element ) || value.isYearMonthWithSlashValidateExcludeZeroNine(); }, jQuery.validator.format( '日期格式錯誤(yyy/MM)' ) ); jQuery.validator.addMethod( 'isDateValidateByString', function( value, element ){ return this.optional( element ) || value.replace(/\//g, "").isDateValidateByString(); }, jQuery.validator.format( '日期格式錯誤(yyyymmdd)' ) ); jQuery.validator.addMethod( 'isDateFormatBySlashByRoc', function( value, element ){ return this.optional( element ) || value == '___/__/__' || value.isDateFormatBySlashByRoc(); }, jQuery.validator.format( '日期格式錯誤(yyy/MM/dd)' ) ); jQuery.validator.addMethod( 'isDateFormatExcludeZeroNine', function( value, element ){ return this.optional( element ) || value == '___/__/__' || value.isDateFormatExcludeZeroNine(); }, jQuery.validator.format( '日期格式錯誤(yyy/MM/dd)' ) ); jQuery.validator.addMethod( 'isDateFormatBySlashByRocIncludeNine', function( value, element ){ return this.optional( element ) || value == '___/__/__' || value == '999/99/99' || value == '000/00/00' || value.isDateFormatBySlashByRoc(); }, jQuery.validator.format( '日期格式錯誤(yyy/MM/dd)或不為 999/99/99 或不為 000/00/00' ) ); jQuery.validator.addMethod( 'isDateTimeNoSecondFormatBySlashByRoc', function( value, element ){ return this.optional( element ) || value.isDateTimeNoSecondFormatBySlashByRoc(); }, jQuery.validator.format( '日期時間格式錯誤(yyy/MM/dd HH:MM)' ) ); jQuery.validator.addMethod( 'isDateTimeFormatBySlashByRoc', function( value, element ){ return this.optional( element ) || value.isDateTimeFormatBySlashByRoc(); }, jQuery.validator.format( '日期時間格式錯誤(yyy/MM/dd HH:MM:SS)' ) ); jQuery.validator.addMethod( 'identity', function( value, element ){ return this.optional( element ) || value.isIdentity(); }, jQuery.validator.format( '身分證號碼錯誤' ) ); jQuery.validator.addMethod( 'mobilePhone', function( value, element ){ var $mobilePhone = $( element ); if(/^\d{4}\d{6}$/.test( value )){ $mobilePhone.val(value.substring(0,4)+"-"+value.substring(4,10)); } return this.optional( element ) || value.isMobilePhone(); }, jQuery.validator.format( '不為行動電話格式(0935-123456)' ) ); jQuery.validator.addMethod( 'password', function( value, element ){ return this.optional( element ) || value.isPassword(); }, jQuery.validator.format( '不為密碼格式(A-Z, a-z, 0-9, "./;[]!@#$%*()_-=+|?")' ) ); jQuery.validator.addMethod( 'phone', function( value, element ){ return this.optional( element ) || value.isPhone(); }, jQuery.validator.format( '不為家用電話格式(02-12345678)' ) ); jQuery.validator.addMethod( 'taxIdentity', function( value, element ){ return this.optional( element ) || value.isTaxIdentity(); }, jQuery.validator.format( '不為統一編號的格式' ) ); jQuery.validator.addMethod( 'word', function( value, element ){ return this.optional( element ) || value.isWord(); }, jQuery.validator.format( '不為 A-Z, a-z, 0-9 的字串' ) ); jQuery.validator.addMethod( 'equalLength', function( value, element, param ){ return this.optional( element ) || value.length == param; }, jQuery.validator.format( '長度應等於 {0} 的字串' ) ); jQuery.validator.addMethod( 'isWordOrBlank', function( value, element, param ){ return this.optional( element ) || value.isWordOrBlank(); }, jQuery.validator.format( '不為 A-Z, a-z, 0-9 ,空白 的字串' ) ); jQuery.validator.addMethod( 'dateRange', function( value, element, param ){ var $minDateEle = $( element ); var $maxDateEle = $( param ); if( $maxDateEle.length == 0 ) alert( '找不到 maxDate 的 selector, id:' + maxDateId ); var dateFormat = $minDateEle.attr( 'dateFormat' ); if( dateFormat == undefined || dateFormat == null ) dateFormat = 'yy/mm/dd'; var minDateString = $.trim( $minDateEle.val() ); var maxDateString = $.trim( $maxDateEle.val() ); if( minDateString == '' || maxDateString == '' ) return true; var minDate = convertRocDateString2Date( minDateString ); var maxDate = convertRocDateString2Date( maxDateString ); return minDate.getTime() <= maxDate.getTime(); }, jQuery.validator.format( '起始日期要小於結束日期' ) ); jQuery.validator.addMethod( 'taxOrIdentity', function( value, element ){ return this.optional( element ) || value.isTaxIdentity() || value.isIdentity(); }, jQuery.validator.format( '不為身分證字號或統一編號的格式' ) ); jQuery.validator.addMethod( 'taxOrIdentityStrange', function( value, element ){ var valid = this.optional( element ) || value.isTaxIdentity() || value.isIdentity(); if( !valid ){ if( confirm( '身分證字號或統一編號或護照格式不正確, 是否要繼續?' ) ) valid = true; else valid = false; } return valid; }, jQuery.validator.format( '不為身分證字號或統一編號的格式或護照格式' ) ); jQuery.validator.addMethod( 'isToday', function( value, element ){ var nowDate = new Date(); var date = convertRocDateString2Date( value ); var valid = ( nowDate.getFullYear == date.getFullYear && nowDate.getMonth() == date.getMonth() && nowDate.getDate() == date.getDate() ); return this.optional( element ) || valid; }, jQuery.validator.format( '不是今日的日期' ) ); jQuery.validator.addMethod( 'isNotToday', function( value, element ){ var nowDate = new Date(); var date = convertRocDateString2Date( value ); var valid = ( nowDate.getFullYear == date.getFullYear && nowDate.getMonth() == date.getMonth() && nowDate.getDate() == date.getDate() ); return this.optional( element ) || !valid; }, jQuery.validator.format( '不能為今日的日期' ) ); /** * ======================================================== 有關數值 ======================================================== */ jQuery.validator.addMethod( 'lessThanDecimal', function( value, element, param ){ return this.optional( element ) || value.isLessThanNPlaceDecimal( param ); }, jQuery.validator.format( '不為整數或小數點在 {0} 位以內' ) ); jQuery.validator.addMethod( 'floatDigitRange', function( value, element, param ){ return this.optional( element ) || value.floatDigitRange( param[0], param[1]); }, jQuery.validator.format( '不為整數在 {0} 位以內或小數點在 {1} 位以內' ) ); jQuery.validator.addMethod( 'tradevanNumber', function( value, element ){ return this.optional( element ) || value.isNumber(); }, jQuery.validator.format( '不為數字' ) ); /** * ======================================================== 有關代碼 ======================================================== */ jQuery.validator.addMethod( 'isExistBySmugWayCd', function( value, element ){ return this.optional( element ) || value.isExistBySmugWayCd(); }, jQuery.validator.format( '走私方式輸入錯誤!' ) ); jQuery.validator.addMethod( 'isExistByCode', function( value, element, param ){ return this.optional( element ) || value.isExistByCode(param); }, jQuery.validator.format( '代碼不存在!' ) ); /** * ======================================================== 其它 ======================================================== */ jQuery.validator.addMethod( 'myFill', function( value, element, parms ){ var $thisEle = $( element ); var $eles = $( parms[1] ); //如果欄位已有檢查到, 就不再檢查其它欄位 if( $eles.filter( function(){ var myFillError = $(this).attr( 'myfillerror' ); if( typeof( myFillError ) != 'undefined' && myFillError == 'true' ) return true; } ).length > 0 ) return true; var valid = $eles.filter( function(){ return $.trim( $(this).val() ) != ''; }).length >= parms[0]; //如果不合法, 會加入 myfillerror="true" if( !valid ) $thisEle.attr( 'myfillerror', 'true' ); return valid; }, jQuery.validator.format( '至少要有 {0} 筆資料輸入' ) ); /** * checkbox至少要有一個checked */ jQuery.validator.addMethod( 'checkboxFill', function( value, element, parms ){ var $thisEle = $( element ); var $eles = $('input[name="'+ $thisEle.prop('name') +'"]' + parms[1] + ':checked', $thisEle.closest('form') ); var valid = $eles.length > 0 ? true : false; return valid; }, jQuery.validator.format( '至少要選擇 {0} 筆' ) ); /** * 全填 or 全不填 */ jQuery.validator.addMethod( 'fillAllorNot', function( value, element, parms ){ var $thisEle = $( element ); var $eles = $('.fillAllorNot',$thisEle.closest('form')); // 如果欄位已有檢查到, 就不再檢查其它欄位 if ($eles.filter(function() { var fillAllorNotError = $(this).attr('fillAllorNotError'); if (typeof (fillAllorNotError) != 'undefined' && fillAllorNotError == 'true') return true; }).length > 0){ return true; } var fillNum = $eles.filter( function(){return $.trim( $(this).val() ) != '';}).length ; var valid = (fillNum == $eles.length || fillNum == 0 ) ? true :false; //如果不合法, 會加入 fillAllorNotError = "true" if( !valid ){ $thisEle.attr( 'fillAllorNotError', 'true' ); } return valid; }, jQuery.validator.format( '欄位不可空白!' ) ); /** * ======================================================== 報單號碼 ======================================================== * * 目前只驗證 1.長度應等於14碼 2.是否為 A-Z, a-z, 0-9 空白 的字串 */ jQuery.validator.addMethod( 'declNo', function( value, element ){ return this.optional( element ) || value.isDeclNo(); }, jQuery.validator.format( '報單號碼錯誤' ) ); jQuery.validator.addClassRules( 'fillOne', { myFill: [ 1, '.fillOne' ] }); jQuery.validator.addClassRules( 'checkboxFillOne', { checkboxFill: [ 1, '.checkboxFillOne' ] }); jQuery.validator.addClassRules( 'fillAllorNot',{ fillAllorNot:[] }); jQuery.validator.addClassRules( 'isWordOrBlank',{ isWordOrBlank:[] }); /** * @Author Eason * * 提供自訂validaton message * * new added $.validator.setMessages Plugin * */ (function ( $ ) { $.extend($.validator, { setIgnoreAlts:function(settings){ $.extend(true,$.validator.ignoreAlts, settings ); }, setMessages:function(settings) { $.extend(true,$.validator.messages, settings ); } }); }( jQuery ));