/* +-------------------------------------------------------------------+ | J S - C H E C K F O R M (v1.2) | | | | Copyright Gerd Tentler www.gerd-tentler.de/tools | | Created: Oct. 23, 2001 Last modified: Jan. 24, 2006 | +-------------------------------------------------------------------+ | This program may be used and hosted free of charge by anyone for | | personal purpose as long as this copyright notice remains intact. | | | | Obtain permission before selling the code for this program or | | hosting this software on a commercial website or redistributing | | this software over the Internet or in any other medium. In all | | cases copyright must remain intact. | +-------------------------------------------------------------------+ ====================================================================================================== ARGUMENTS: - form-name or -number - 'field:title:type:minimum length'[, ...] (type = number / mail / url / date(format) / [none]) Example: checkForm('frm1', 'name:::2', 'age::number:1', 'eMail:e-mail:mail:1', 'homepage::url:0', 'birthday::date(dmy):1'); ------------------------------------------------------------------------------------------------------ This script was tested with the following systems and browsers: - Windows XP: IE 6, NN 7, Opera 7, Firefox 1 - Mac OS X: IE 5, Safari 1 If you use another browser or system, this script may not work for you - sorry. NOTE: Safari 1 on Mac OS X does only accept dates between Jan. 1, 1901 and Dec. 31, 2037 as valid. ====================================================================================================== */ //-------------------------------------------------------------------------------------------------------- // Language settings //-------------------------------------------------------------------------------------------------------- var msgNumber = "must be a number"; var msgEMail = "must be an e-mail address"; var msgURL = "must be a web address"; var msgDate = "must be a date"; var msgFillOut = "Please fill out"; var msgNoForm = "Form does not exist"; var msgNoField = "Field does not exist"; //-------------------------------------------------------------------------------------------------------- // Functions //-------------------------------------------------------------------------------------------------------- function _trim(str) { if(str) { str = str.replace(/^\s+/, ""); str = str.replace(/\s+$/, ""); } return str; } function _isDate(year, month, day) { month--; if(year < 100) year += 2000; var d = new Date(year, month, day); return ((day == d.getDate()) && (month == d.getMonth()) && (year == d.getFullYear())); } function checkForm() { var args = checkForm.arguments; var f = args[0]; var msg = ""; var arr, field, title, type, minLength, elem, val, cnt, i, j; var format, d, day, month, year; var valid_url = /^(https?|ftp):\/\/([a-z0-9._-]+:[a-z0-9._-]+@)?[a-z0-9äöüÄÖÜ#._\/~% -]+(\?([a-z0-9_-]+(=[a-zA-Z0-99äöüÄÖÜß+%?_-]+&?)?)*)?$/i; var valid_mail = /^[a-z0-9._-]+@[a-z0-9äöüÄÖÜ.-]+\.[a-z]{2,4}$/i; var onsubmit = function() {}; if(document.forms[f]) { for(i = 1; i < args.length; i++) { arr = args[i].split(":"); field = _trim(arr[0]); title = _trim(arr[1]); if(!title) title = field; type = _trim(arr[2].toLowerCase()); minLength = _trim(arr[3]); elem = document.forms[f].elements[field]; if (type == 'onsubmit') { if (typeof window[field] == 'function') onsubmit = window[field]; continue; } if(elem) { val = _trim(elem.value); if(val != "") { if(type == "number") { val = val.replace(",", "."); if(isNaN(val)) msg += '"' + title + '" ' + msgNumber + "\n"; } else if(type == "mail" && val.search(valid_mail) == -1) msg += '"' + title + '" ' + msgEMail + "\n"; else if(type == "url" && val.search(valid_url) == -1) msg += '"' + title + '" ' + msgURL + "\n"; else if(type.indexOf("date") != -1) { if(type.indexOf("(") != -1) format = type.substr(type.indexOf("(")); else format = "(dmy)"; d = val; for(j = 1; j < format.length - 1; j++) { cnt = d.search(/[^0-9]/); if(cnt == -1) cnt = d.length; switch(format.charAt(j)) { case "d": day = parseInt(d.substr(0, cnt)); d = d.substr(cnt + 1); break; case "m": month = parseInt(d.substr(0, cnt)); d = d.substr(cnt + 1); break; case "y": year = parseInt(d.substr(0, cnt)); d = d.substr(cnt + 1); break; } } if(!_isDate(year, month, day)) msg += '"' + title + '" ' + msgDate + "\n"; } } if(minLength) { if(elem.length) { if(elem.options) { for(j = cnt = 0; j < elem.options.length; j++) { if(elem.options[j].selected && elem.options[j].value != "") cnt++; } } else for(j = cnt = 0; j < elem.length; j++) { if(elem[j].checked) cnt++; } } else if(elem.type == "checkbox" || elem.type == "radio") cnt = elem.checked ? 1 : 0; else cnt = val.length; if(cnt < minLength) msg += msgFillOut + ' "' + title + '"\n'; } } else msg += msgNoField + ': "' + field + '"\n'; } if(msg) alert(msg); else { if (typeof onsubmit == 'function') onsubmit(); document.forms[f].submit(); } } else alert(msgNoForm + ': "' + f + '"'); }