• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Datumsprüfung mit Regex

spade

New member
Guten Tag,

kann mir bitte jemand erklären, warum dieser Kode bzw. das Regex-Pattern nicht funktioniert, z. B. wenn ich sie mit 07.07.1951 aufrufe?
Code:
function isDate(date) {
	 var reg = new RegExp ('/^[0-3][0-9].[0-1][0-9].[1-2][09][0-9][0-9]$/');
	 if (reg.test(date)==false)
	 {alert ("Bitte geben Sie ein gültiges Geburtsdatum im Format TT.MM.JJJJ (z.*B. 23.11.1945) ein!");
	    return false;}
}
Oder gibt es dafür eine bessere Lösung? Was ich hier oder bei Google bisher gefunden habe, hat mich leider nicht weitergebracht.

Ich wäre sehr dankbar, wenn mir jemand helfen könnte.
 
Das liegt daran, dass man bei Konstruktor von RegExp die "/" am Anfang und Ende nicht hinschreiben darf. Besser du verwendest da direkt die Lieralschreibweise: var reg = /^[0-3][0-9]\.[0-1][0-9]\.[1-2][09][0-9][0-9]$/;

Aber so kann man nicht gut prüfen, ob etwas ein valides Datum ist. Du kannst das Format damit prüfen, aber so kann ich z.B. "39.19.1000" eingeben, was du ziemlich sicher nicht haben willst.

Ich würde mit einer RegExp das Format prüfen und dann die Teile in den Konstruktor von Date packen und prüfen, ob das richtige Datum rauskommt:

Code:
function isDate(str){
	var m = str.match(/^(\d{1,2})\.(\d{1,2})\.(\d{4})$/);
	if (m){
		var year = parseInt(m[3], 10);
		var month = parseInt(m[2], 10) - 1;
		var date = parseInt(m[1], 10);
		var d = new Date(year, month, date, 12, 0, 0);
		return d.getFullYear() === year && d.getMonth() === month && d.getDate() === date;
	}
	return false;
}
- ohne Gewähr.
 
Zurück
Oben