/** * This UDF is an extensible, easy to use pattern validator using regular expressions. * Rewrites by rcamden. * * @param checkWhat Name of the pattern to use. (Required) * @param str String to check. (Required) * @return Returns a boolean. * @author Chris Chay (itadept@earthlink.net) * @version 2, January 15, 2003 */ function CheckPattern(checkWhat, str) { var rePattern=""; // Assign RE pattern to this variable switch (checkWhat){ case "isEmail": rePattern="^([\w\d\-\.]+)@{1}(([\w\d\-]{1,67})|([\w\d\-]+\.[\w\d\-]{1,67}))\.(([a-zA-Z\d]{2,4})(\.[a-zA-Z\d]{2})?)$"; break; case "isIP": rePattern="^(((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|0?[0-9]?[0-9])\.){3,3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|0?[0-9]?[0-9]))$"; break; case "isFloat": rePattern="^[-+]?\d*\.?\d*$"; break; case "isInteger": rePattern="^[+-]?\d+$"; break; case "isUSPhone": rePattern="^((\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{4}$"; break; case "isUSCurrency": rePattern="^\$(\d{1,3}(\,\d{3})*|(\d+))(\.\d{2})?$"; break; case "isDate": rePattern="^(?:(?:(?:0?[13578]|1[02])(\/|-|\.)31)\1|(?:(?:0?[1,3-9]|1[0-2])(\/|-|\.)(?:29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:0?2(\/|-|\.)29\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:(?:0?[1-9])|(?:1[0-2]))(\/|-|\.)(?:0?[1-9]|1\d|2[0-8])\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$"; break; case "isCreditCard": rePattern="^((4\d{3})|(5[1-5]\d{2})|(6011))-?\d{4}-?\d{4}-?\d{4}|3[4,7]\d{13}$"; break; case "isSSN": rePattern="^\d{3}-\d{2}-\d{4}$"; break; case "isZipCode": rePattern="^\d{5}-\d{4}|\d{5}|[A-Z]\d[A-Z] \d[A-Z]\d$"; break; case "isPostalCode": rePattern="^[[:alpha:]][[:digit:]][[:alpha:]]( |-)?[[:digit:]][[:alpha:]][[:digit:]]$"; break; default: return("That pattern check is not available"); break; } return reFindNoCase(rePattern,str); } /** * Returns TRUE if the string is a valid credit card number. * Modded by RCamden - Check for any non numeric and return false. * Modded by Author - fixed mastercard checking * Updated to use [:digit:] and allow spaces * * @param ccNo The credit card number. * @param cardType One of: AMEX, DINERS, DISCOVER, MASTERCARD, VISA * @return Returns a boolean. * @author Nick de Voil (nick@devoil.com) * @version 3, March 12, 2002 */ function IsCreditCard(ccNo) { var rv = ""; var str = ""; var chk = 0; var ccln = 0; var strln = 0; var i = 1; if(reFind("[^[:digit:] ]",ccNo)) return FALSE; ccNo = replace(ccNo," ","","ALL"); rv = Reverse(ccNo); ccln = Len(ccNo); if(ccln lt 12) return FALSE; for(i = 1; i lte ccln; i = i + 1) { if(i mod 2 eq 0) { str = str & Mid(rv, i, 1) * 2; } else { str = str & Mid(rv, i, 1); } } strln = Len(str); for(i = 1; i lte strln; i = i + 1) chk = chk + Mid(str, i, 1); if((chk neq 0) and (chk mod 10 eq 0)) { if(ArrayLen(Arguments) lt 2) return TRUE; switch(UCase(Arguments[2])) { case "AMEX": if ((ccln eq 15) and (((Left(ccNo, 2) is "34")) or ((Left(ccNo, 2) is "37")))) return TRUE; break; case "DINERS": if ((ccln eq 14) and (((Left(ccNo, 3) gte 300) and (Left(ccNo, 3) lte 305)) or (Left(ccNo, 2) is "36") or (Left(ccNo, 2) is "38"))) return TRUE; break; case "DISCOVER": if ((ccln eq 16) and (Left(ccNo, 4) is "6011")) return TRUE; break; case "MASTERCARD": if ((ccln eq 16) and (Left(ccNo, 2) gte 51) and (Left(ccNo, 2) lte 55)) return TRUE; break; case "VISA": if (((ccln eq 13) or (ccln eq 16)) and (Left(ccNo, 1) is "4")) return TRUE; break; default: return TRUE; } } return FALSE; }