/*************************************************** fValidate Copyright (c) 2000-2003 by Peter Bailey www.peterbailey.net/fValidate/ fValidate.ecommerce.js Included Validators ------------------- money cc This file is only part of a larger validation library and will not function autonomously. Created at a tab-spacing of four (4) ****************************************************/ fValidate.prototype.money = function( ds, grp, dml ) { if ( this.typeMismatch( 'text' ) ) return; ds = ( ds == ' ' ) ? false : ds.toPattern(); grp = ( grp == ' ' ) ? false : grp.toPattern(); dml = ( dml == ' ' ) ? false : dml.toPattern(); var moneySyntax, pattern; switch( true ) { case Boolean( ds && grp && dml ): // Dollar sign, grouping, and decimal pattern = "^" + ds + "(?:(?:[0-9]{1,3}" + grp + ")(?:[0-9]{3}" + grp + ")*[0-9]{3}|[0-9]{1,3})(" + dml + "[0-9]{2})$"; moneySyntax = ds + "XX" + grp + "XXX" + dml + "XX"; break; case Boolean( ds && grp && !dml ): // Dollar sign and grouping pattern = "^" + ds + "(?:(?:[0-9]{1,3}" + grp + ")(?:[0-9]{3}" + grp + ")*[0-9]{3}|[0-9]{1,3})$"; moneySyntax = "" + ds + "XX" + grp + "XXX"; break; case Boolean( ds && !grp && dml ): // Dollar sign and decimal pattern ="^" + ds + "[0-9]*(\\.[0-9]{2})$"; moneySyntax ="" + ds + "XXXXX" + dml + "XX"; break; case Boolean( !ds && grp && dml ): // Grouping and decimal pattern ="^(?:(?:[0-9]{1,3}" + grp + ")(?:[0-9]{3}" + grp + ")*[0-9]{3}|[0-9]{1,3})(" + dml + "[0-9]{2})?$"; moneySyntax ="XX" + grp + "XXX" + dml + "XX"; break; case Boolean( ds && !grp && !dml ): // Dollar sign only pattern ="^" + ds + "[0-9]*$"; moneySyntax ="" + ds + "XXXXX"; break; case Boolean( !ds && grp && !dml ): // Grouping only pattern ="^(?:(?:[0-9]{1,3}" + grp + ")(?:[0-9]{3}" + grp + ")*[0-9]{3}|[0-9]{1,3})$"; moneySyntax ="XX" + grp + "XXX"; break; case Boolean( !ds && !grp && dml ): // Decimal only pattern ="^[0-9]*(" + dml + "[0-9]{2})$"; moneySyntax ="XXXXX" + dml + "XX"; break; case Boolean( !ds && !grp && !dml ): // No params set, all special chars become optional pattern ="^.?(?:(?:[0-9]{1,3}.?)(?:[0-9]{3}.?)*[0-9]{3}|[0-9]{1,3})(.[0-9]{2})?$"; moneySyntax ="[?]XX[?]XXX[?XX]"; } var regex = new RegExp( pattern ); if ( !regex.test( this.elem.value ) ) { this.throwError( [this.elem.fName, moneySyntax.replace( /\\/g, '' )] ); } } fValidate.prototype.cc = function() { if ( this.typeMismatch( 'text' ) ) return; var typeElem = this.form.elements[this.config.ccType]; if ( !typeElem ) { this.devError( 'noCCType' ) return; } var ccType = typeElem.options[typeElem.selectedIndex].value.toUpperCase(); var types = { 'VISA' : /^4\d{12}(\d{3})?$/, 'MC' : /^5[1-5]\d{14}$/, 'DISC' : /^6011\d{12}$/, 'AMEX' : /^3[4|7]\d{13}$/, 'DINERS' : /^3[0|6|8]\d{12}$/, 'ENROUTE' : /^2[014|149]\d{11}$/, 'JCB' : /^3[088|096|112|158|337|528]\d{12}$/, 'SWITCH' : /^(49030[2-9]|49033[5-9]|49110[1-2]|4911(7[4-9]|8[1-2])|4936[0-9]{2}|564182|6333[0-4][0-9]|6759[0-9]{2})\d{10}(\d{2,3})?$/, 'DELTA' : /^4(1373[3-7]|462[0-9]{2}|5397[8|9]|54313|5443[2-5]|54742|567(2[5-9]|3[0-9]|4[0-5])|658[3-7][0-9]|659(0[1-9]|[1-4][0-9]|50)|844[09|10]|909[6-7][0-9]|9218[1|2]|98824)\d{10}$/, 'SOLO' : /^(6334[5-9][0-9]|6767[0-9]{2})\d{10}(\d{2,3})?$/ }; if ( typeElem.validated == false && this.groupError == true ) return; if ( typeof types[ccType] == 'undefined' && typeElem.validated == false && this.groupError == false ) { this.devError( [ccType] ); return; } this.elem.value = this.elem.value.replace( /[^\d]/g, "" ); if ( !types[ccType].test( this.elem.value )) { this.throwError( [this.elem.fName] ); } } String.prototype.luhn = function() { var i = this.length; var checkSum = "", digit; while ( digit = this.charAt( --i ) ) { checkSum += ( i % 2 == 0 ) ? digit * 2 : digit; } checkSum = eval( checkSum.split('').join('+') ); return ( checkSum % 10 == 0 ); } // EOF