/*form_pruefen.js * by Thorsten Ruppenstein. v2.1 * 02.03.2005 Fehler bei "nid" und "aid" beseitigt (Überprüfung auf NULL reichte nicht aus) * Erweiterung um Zeitfeld hh:mm * 08.06.2005 Fehler bei parseInt(x) behoben (führende Null); jetzt: parseInt(x, 10) * 27.09.2005 Erweiterung um oid's ("Optionsfelder") * 05.10.2005 Erweiterung um Parameter init_ok, init_fehlertext ("Einbindung" vorgeschalteter Prüfungen); * vgl. Travelprotect.de * 10.10.2005 Erweiterung: Es werden nur Felder geprüft, die auch sichtbar sind. * 28.02.2007 Erweiterung um pid 64 Prüfen auf E-Mail-Adresse * * !!! Spezielle Anpassung (Datum: String "TT.MM.JJJJ" wird als leer interpretiert) * * 17.08.2006 Fehler: bspw. !flag_sid[el_sid], Lösung verwende "1" als init-Wert und "2" als Flag * */ //Rückgabe: TRUE oder FALSE function pruefen(form, init_ok, init_fehlertext){ ok = true; fehlertext = "FEHLER BEI DER EINGABE\n\nFolgende Fehler sind aufgetreten:\n"; if (!init_ok) { if (init_fehlertext) { fehlertext += init_fehlertext; ok = false; } } //Felder prüfen /* pid's (kombinierbar, z.Bsp. : 1+2=3) * 1 Feld UNTER KEINEN UMSTÄNDEN LEER * 2 Feld positive ganze Zahl (>=0) * 4 Feld muss Datumsformat TT.MM.JJJJ haben oder leer * 8 checkbox: mindestens eins ausgewählt * 16 select: mindestens eins ausgewählt * 32 Feld muss Uhrzeit sein HH[:|.]MM oder leer * 64 Feld muss E-Mail-Adresse sein w.+[@]w.+[.]w.+ oder leer * 128 Format Telefon nach CH-Format * 256 Format PID * 512 Format PIN * 1024 Format Reg./KD-Nr. * 2048 Feld UNTER KEINEN Zahlen enthalten */ /* aid's * bei gleichem Wert muss mindestens eins grösser 0 sein (verwenden mit pid=2) */ /* oid's * wie aid's, jedoch speziell für Radiobuttons (Optionsfelder) /* sid's * bei gleichem Wert müssen die betreffenden Felder auch den gleichen Inhalt haben */ /* nid's * bei gleichem Wert dürfen nicht alle betreffenden leer sein */ flag_nid = new Array(); flag_message_nid = new Array(); flag_aid = new Array(); flag_message_aid = new Array(); flag_oid = new Array(); flag_message_oid = new Array(); flag_sid = new Array(); flag_value_sid = new Array(); flag_message_sid = new Array(); for (i=0; i0) { if (flag_oid[el_oid]==null || !flag_oid[el_oid]) { flag_oid[el_oid] = 1; flag_message_oid[el_oid] = el_message; } if (getOptionValue(form[el.name])>0) { flag_oid[el_oid] = 2; } } if (el_aid>0) { if (flag_aid[el_aid]==null || !flag_aid[el_aid]) { flag_aid[el_aid] = 1; flag_message_aid[el_aid] = el_message; } if (el.value>0) { flag_aid[el_aid] = 2; } } if (el_sid>0) { if (flag_sid[el_sid]==null || !flag_sid[el_sid]) { flag_sid[el_sid] = 1; flag_message_sid[el_sid] = el_message; flag_value_sid[el_sid] = el.value; } if (el.value!=flag_value_sid[el_sid]) { flag_sid[el_sid] = 2; } } if (el_nid>0) { if (flag_nid[el_nid]==null || !flag_nid[el_nid]) { flag_nid[el_nid] = 1; flag_message_nid[el_nid] = el_message; } if (el.value!=""){ flag_nid[el_nid] = 2; } } if (el_pid & 1) { if (el.value=="" || el.value == "TT.MM.JJJJ") { ok = false; fehlertext += "- Das Feld " + el_message + " darf nicht leer sein.\n"; } } if (el_pid & 2) { if(parseInt(el.value, 10)!=el.value || parseInt(el.value, 10)<0) { ok = false; fehlertext += "- Das Feld " + el_message + " darf nur aus Ziffern (0-9) bestehen.\n"; } } if (el_pid & 32) { if (el.value.length>0) { var AusdruckNum = /^(\d{1,2})$/ if (AusdruckNum.test(el.value)==true) { var ErgebnisNum = AusdruckNum.exec(el.value); var stundeNum = parseInt(RegExp.$1, 10); var stunde_okNum = true; if (stundeNum<0 || stundeNum>24) stunde_okNum = false; if (stunde_okNum) { //ersetze 24 durch 00 if (stundeNum==24) { stundeNum=0; } //bringe die Eingabe auf das passende Format (Mit Nullen auffüllen) str_hNum = "" + stundeNum; str_mNum = "0"; if(str_hNum.length<2) str_hNum = "0" + str_hNum; if(str_mNum.length<2) str_mNum = "0" + str_mNum; el.value = str_hNum + ":" + str_mNum; } else { ok = false; fehlertext += "- Das Feld " + el_message + " muss im Format HH:MM sein."; if (!stunde_okNum) fehlertext += "(Fehler bei Stunde)"; fehlertext += "\n"; } } var Ausdruck = /^(\d{1,2})[:|.](\d{1,2})$/ if (Ausdruck.test(el.value)==false) { ok = false; fehlertext += "- Das Feld " + el_message + " muss im Format HH:MM sein.\n"; } else { var Ergebnis = Ausdruck.exec(el.value); var stunde = parseInt(RegExp.$1, 10) var minute = parseInt(RegExp.$2, 10) var stunde_ok = true; var minute_ok = true; if (stunde<0 || stunde>24) stunde_ok = false; if (minute<0 || minute>59) minute_ok = false; if (stunde_ok && minute_ok) { //ersetze 24 durch 00 if (stunde==24) { stunde=0; } //bringe die Eingabe auf das passende Format (Mit Nullen auffüllen) str_h = "" + stunde; str_m = "" + minute; if(str_h.length<2) str_h = "0" + str_h; if(str_m.length<2) str_m = "0" + str_m; el.value = str_h + ":" + str_m; } else { ok = false; fehlertext += "- Das Feld " + el_message + " muss im Format HH:MM sein."; if (!minute_ok && stunde_ok) fehlertext += "(Fehler bei Minute)"; if (!minute_ok && !stunde_ok) fehlertext += "(Fehler bei Stunde und Minute)"; if (minute_ok && !stunde_ok) fehlertext += "(Fehler bei Stunde)"; fehlertext += "\n"; } } } } if (el_pid & 64) { if (el.value.length>0) { var strReg = "^([a-zA-Z0-9_\.\-])+\@([a-zA-Z0-9\-\.])+\.([a-zA-Z0-9]{2,4})+$"; var regex = new RegExp(strReg); if (regex.test(el.value)==false) { ok = false; fehlertext += "- Das Feld " + el_message + " muss im Format myname@provider.com sein.\n"; } } } if (el_pid & 128) { if (el.value.length>0) { var strReg = /^([\+]{1})(\d{2}) (\d{2}) (\d{3}) (\d{2}) (\d{2})$/; var regex = new RegExp(strReg); if (regex.test(el.value)==false) { ok = false; fehlertext += "- Das Feld " + el_message + " muss im Format +41 XX XXX XX XX sein.\n"; } } } if (el_pid & 256) { if (el.value.length>0) { var strReg = /^(\w{2})-(\d{4})-(\w{4})$/; var regex = new RegExp(strReg); if (regex.test(el.value)==false) { ok = false; fehlertext += "- Das Feld " + el_message + " muss im Format XX-0000-XXXX sein.\n"; } } } if (el_pid & 512) { if (el.value.length>0) { var strReg = /^(\d{2})\.(\d{3})\.(\d{3})\.(\d{3})$/; var regex = new RegExp(strReg); if (regex.test(el.value)==false) { ok = false; fehlertext += "- Das Feld " + el_message + " muss im Format 00.000.000.000 sein.\n"; } } } if (el_pid & 1024) { if (el.value.length>0) { var strReg = /^(\d{4})\.(\d{3})\.(\d{3})$/; var regex = new RegExp(strReg); if (regex.test(el.value)==false) { ok = false; fehlertext += "- Das Feld " + el_message + " muss im Format 0000.000.000 sein.\n"; } } } if (el_pid & 2048) { if (el.value.length>0) { var strReg = /^([\D]*)([\d]+)$/; var regex = new RegExp(strReg); if (regex.test(el.value)!=false) { ok = false; fehlertext += "- Das Feld " + el_message + " darf keine Zahl enthalten.\n"; } } } if (el_pid & 4) { if (el.value.length>0 && el.value != "TT.MM.JJJJ") { var Ausdruck = /^(\d{1,2})\.(\d{1,2})\.(\d{4})$/ if (Ausdruck.test(el.value)==false) { ok = false; fehlertext += "- Das Feld " + el_message + " muss im Format TT.MM.JJJJ sein.\n"; } else { var Ergebnis = Ausdruck.exec(el.value); var tag = parseInt(RegExp.$1, 10); var monat = parseInt(RegExp.$2, 10); //alert("Monat: " + monat + " Tag: " + tag + " 0: " + RegExp.$1); switch(monat) { // 31 Tage case 1: case 3: case 5: case 7: case 8: case 10: case 12: if ((tag<1) || (tag>31)) { ok = false; fehlertext += "- Das Feld " + el_message + " muss im Format TT.MM.JJJJ sein. (Tag ung\u00fcltig)\n" + tag + "\n"; } break; // 30 Tage case 4: case 6: case 9: case 11: if ((tag<1) || (tag>30)) { ok = false; fehlertext += "- Das Feld " + el_message + " muss im Format TT.MM.JJJJ sein. (Tag ung\u00fcltig: " + tag + ")\n"; } break; //Februar maximal 29 case 2: if ((tag<1) || (tag>29)) { ok = false; fehlertext += "- Das Feld " + el_message + " muss im Format TT.MM.JJJJ sein. (Tag ung\u00fcltig)\n" + tag + "\n"; } break; default: ok = false; fehlertext += "- Das Feld " + el_message + " muss im Format TT.MM.JJJJ sein. (Monat ung\u00fcltig)\n" + monat + "\n"; break; } } } } if (el_pid & 8) { if (form[el.name].length>0) { zaehler = 0; for (k = 0 ; k < form[el.name].length; k++){ if (form[el.name][k].checked) zaehler = zaehler + 1; } if(zaehler==0) { ok = false; fehlertext += "- Bei " + el_message + " muss mindestens eine Alternative gew\u00e4hlt sein.\n"; } } else { if (!(form[el.name].checked)) { ok = false; fehlertext += "- Das Feld " + el_message + " muss angeklickt sein.\n"; } } } if (el_pid & 16) { if (el.selectedIndex==0){ ok = false; fehlertext += "- Bitte w\u00e4hle deine gew\u00FCnschte Kategorie aus.\n"; } } } // ist_sichtbar? }//ENDE FOR for (l=0; l bei Grossvater weitermachen default: return ist_sichtbar(el.parentNode); break; } } else { return ist_sichtbar(el.parentNode); } } //keine Eltern mehr else return true; }