// Phone number validation and formatting (JavaScript 1.0 version) // // $Id: phonenumber.js,v 1.12 2006/05/03 18:05:28 jseverson Exp $ // // $Log: phonenumber.js,v $ // Revision 1.12 2006/05/03 18:05:28 jseverson // Setting language variable from get parameter if present. // // Revision 1.11 2006/03/22 19:16:00 jseverson // Adding multi language support for alerts // // Revision 1.10 2006/02/25 00:53:34 jreed // Moved chkPhoneNo() validation function from CRM // // Revision 1.9 2004/08/02 17:58:00 jreed // Fixed phone validation // // Revision 1.8 2004/07/30 21:43:02 jreed // validPhone - Only allow 10 digits for phone in US and Canada // // Revision 1.7 2004/07/30 20:54:18 jreed // Fixed validation functions // // Revision 1.6 2004/07/30 01:34:00 jreed // Changed phone validation function names // // Revision 1.5 2004/07/22 22:39:09 jreed // Added better javascript phone validation // // Revision 1.4 2002/02/20 18:42:46 nwiggins // // # removes script tags - forces usage as a javascript src include. no php includes // // Revision 1.3 2001/07/18 23:07:57 jneil // Fixed some problems. // // Revision 1.2 2001/07/02 06:11:18 vhegde // Revision 1.1 2001/05/21 15:53:53 jneil // Initial Upload. // // function formatPhone(number,format) { // format = "0" | "none" | ""; // "1" | "()"; // "-" | (user selected separator); // Note: all above must be passed as strings // Otherwise generates an error in comparison var formattedNumber = number + ""; var pre = ""; var area = ""; var trunk = ""; var post = ""; if (number.length == 11) { pre = number.substring(0,1); area = number.substring(1,4); trunk = number.substring(4,7); post = number.substring(7); } else if (number.length == 10) { area = number.substring(0,3); trunk = number.substring(3,6); post = number.substring(6); } else if (number.length == 7) { trunk = number.substring(0,3); post = number.substring(3); } if (format != "" || format != null) { // Use the default U.S. format: 1 (800) 123-4567 if (format == "()" || format == "1") { if (number.length == 11) { formattedNumber = pre + " (" + area + ") " + trunk + "-" + post; } else if (number.length == 10) { formattedNumber = "(" + area + ") " + trunk + "-" + post; } else if (number.length == 7) { formattedNumber = trunk + "-" + post; } } // Use a passed separator to hyphenate the output else if (format != "()" || format != "1") { if (number.length == 11) { formattedNumber = pre + format + area + format + trunk + format + post; } else if (number.length == 10) { formattedNumber = area + format + trunk + format + post; } else if (number.length == 7) { formattedNumber = trunk + format + post; } } } return formattedNumber; } function validPhone(phNumber,format,form,field,required) { // Pass in form and field name // Makes the function reusable // format = "0" | "none" | ""; // "1" | "()"; // "-" | (user selected separator); // Note: all above must be passed as quoted strings // Otherwise generates an error in comparison // required = 0 | false | null for optional; // 1 | true for required; // Note: the above are boolean|numeric, no quotes // VARIABLES USED: // killForm = a numeric flag used to stop or post the form // special = a string of special characters to strip out for validation // phOrig = the stored original user input // phNum = the same, but will be manipulated/changed by the script // phTrunc = the phone number truncated, minus any Ext.; will be changed by the script // phLowCase = the phone number in lowercase; to find "Ext.", "ext", etc. // phLowCaseX = phTrunc in lowercase; to find "x000", "X 000", etc. // phNoExt = the changed number without any extension; sent to the format function // ext = holds the value "Ext" || "ext" || "ex." etc. (if found in the phone number) // x = holds the value "x" || "X" (if found in the phone number) // before = a section of the phone number before an illegal character // after = a section of the phone number after an illegal character // formattedPhone = the final output of both functions var i = 0; var j = 0; var killForm = 0; if (form != null && field != null && form != "" && field != "") { var useForm = true; var phOrig = document[form][field].value; var phNum = document[form][field].value; var phTrunc = document[form][field].value; var phNoExt = document[form][field].value; } else { var useForm = false; var phOrig = validPhone.arguments[0]; var phNum = validPhone.arguments[0]; var phTrunc = validPhone.arguments[0]; var phNoExt = validPhone.arguments[0]; } var formattedPhone = ""; var phLowCase = ""; var phLowCaseX = ""; var before = ""; var after = ""; var x = ""; var ext = ""; var extension = ""; // Add any special characters to strip out here: var special = "()-. ,:;/\|*+#@&="; // If blank and required, kill the form if (phNum == "" && (required == 1 || required == true)) { alert('Sorry! A phone number is required.') // Put the offending field in focus if (useForm) document[form][field].focus(); // Stop the form post return false; } // If it's blank but not required, let it through else if (phNum == "") { return true; } else { // Find "Ext. 000" extensions and separate them out phLowCase = phNum.toLowerCase(); ext = phLowCase.lastIndexOf("ext"); if (ext != -1) { extension = phOrig.substring(ext,phOrig.length); phTrunc = phNum.substring(0,ext); phNoExt = phNum.substring(0,ext); } else { extension = ""; } // This strips out formatting characters for length comparison for (i=0;i 7 && x != -1 && (x == 7 || x == 10 || x == 11)) { // extension = phTrunc.substring(x,phTrunc.length); // phTrunc = phTrunc.substring(0,x); // phNoExt = phNum.substring(0,phNum.indexOf(extension)); // } // } if (phTrunc.length == 11) { // Make sure the first 4 characters (1-800) are numeric for (i=0;i<4;i++) { if (parseInt(phTrunc.charAt(i)) + "" == Number.NaN + "") { killForm = 1; } } // There is no such thing as 2-800 or 1-000 if (phTrunc.charAt(0) != "1" && phTrunc.charAt(0) != "0" || phTrunc.charAt(1) == "0") { killForm = 1; } } else if (phTrunc.length == 10) { // Make sure the area code is numeric for (i=0;i<3;i++) { if (parseInt(phTrunc.charAt(i)) + "" == Number.NaN + "") { killForm = 1; } } // No area codes begin with 0 or 1 if (phTrunc.charAt(0) == "0" || phTrunc.charAt(0) == "1") { killForm = 1; } } else if (phTrunc.length == 7) { // No phone numbers begin with 0 or 1 if (phTrunc.charAt(0) == "0" || phTrunc.charAt(0) == "1") { killForm = 1; } } // A proper US ph# should be 7, 10 or 11 characters now else if (phTrunc.length != 7 && phTrunc.length != 10 && phTrunc.length != 11) { killForm = 1; } } if (killForm == 1) { // Prompt for proper phone number... var msg = "Sorry!\nYou have entered an\ninvalid phone number.\n\nPlease check the number\nand try again."; alert(msg); // Automatically select and focus the phone number form field for easy user correction if (useForm) { document[form][field].select(); document[form][field].focus(); } // Stop the form post return false; } else { if (format && format != null && format != "" && format != "none" && format != "0") { // If calling field requires phone number formatting phNum = formatPhone(phTrunc,format) + " " + extension; } formattedPhone = phNum; if (useForm) document[form][field].value = formattedPhone; // Garbage collection. Some variables seemed to retain their modified values after exiting? phOrig = phNum = phTrunc = i = j = killForm = formattedPhone = phLowCase = phLowCaseX = phNoExt = before = after = x = ext = extension = null; if (useForm) { return true; } else { return formattedPhone; } } } // ********************************************************** function phoneIsInteger(s) { var i; for (i = 0; i < s.length; i++) { var c = s.charAt(i); if (((c < "0") || (c > "9"))) return false; } return true; } function phoneStripCharsInBag(s, bag) { var i; var returnString = ""; for (i = 0; i < s.length; i++) { var c = s.charAt(i); if (bag.indexOf(c) == -1) returnString += c; } return returnString; } function checkInternationalPhone(strPhone,strCountry){ s=phoneStripCharsInBag(strPhone,"()- "); if ((strCountry != "US") && (strCountry != "CA")) return (phoneIsInteger(s) && s.length >= 10); else return (phoneIsInteger(s) && s.length == 10); } function validPhone(country,cCode,phone,ext,isRequired,label){ if ((country.value == "US") || (country.value == "CA")) { if (phone.value) cCode.value = "01"; else cCode.value = ""; } if (!phone.value && (isRequired || cCode.value || ext.value)){ phone.select() alert('Please enter your ' + label + '.') return false } if (phone.value && !checkInternationalPhone(phone.value,country.value)){ phone.select() alert('Please enter a valid ' + label + '.') return false } if (!phoneIsInteger(ext.value)){ ext.select() alert('Please enter a valid ' + label + ' extension.') return false } if (!cCode.value && (country.value != "US") && (country.value != "CA") && (isRequired || phone.value || ext.value)){ cCode.focus() alert('Please enter your ' + label + ' country code.') return false } if (!phoneIsInteger(cCode.value)){ cCode.select() alert('Please enter a valid ' + label + ' country code.') return false } return true } function chkPhoneNo(objPhone) { var valid = 1; var validchar = "0123456789() -+ext."; var i = 0; var phoneNumberDelimiters = "()- +ext."; var normalizedPhone = phoneStripCharsInBag(objPhone.value, phoneNumberDelimiters); if ((normalizedPhone.length > 0) && (normalizedPhone.length < 10)) { alert('Please enter a valid phone number with area code (at least 10 digits)'); objPhone.select(); objPhone.focus(); return false; } for (i=0; i <= objPhone.value.length -1; i++) { if (validchar.indexOf(objPhone.value.charAt(i)) == -1) { alert('Invalid character ' + objPhone.value.charAt(i) + ' entered.'); objPhone.value = ""; objPhone.select(); objPhone.focus(); return false; } } return true; }
rss
Карта