Fehler in regulären Ausdruck JavaScript
Hallo zusammen,
ich habe ein PHP-System von meinem Vorgänger übernommen und bin noch dabei einzusteigen.
Jetzt habe ich folgendes Problem gefunden:
Ich habe eine Textbox, in der ich ein Datum eingebe. Bis zum Datum 31.07.XXXX geht alles gut. Ab dem 01.08.XXXX wirft ein regulärer Ausdruck/JavaScript alles durcheinander.
Hier mal die Zeile:
'f=f.replace(/^\s+/, \'\').replace(/\s+$/, \'\').replace(/\s{2,}/, \' \'); try{var x=f.split(\'.\'); var d=new Date(); d.setYear(parseInt(x[2])); d.setMonth(parseInt(x[1])-1); d.setDate(parseInt(x)); if(isNaN(d)) return \'\'; var t=d.getDate(); if(!parseInt(t/10)) t=\'0\'+t; var m=d.getMonth()+1; if(!parseInt(m/10)) m=\'0\'+m; return t+\'.\'+m+\'.\'+d.getFullYear();}catch(e){return \'\';}'
Steigt hier jemand durch? Erkennt hier jemand den Fehler und kann mir sagen, wieso das Datum falsch ausgeworfen wird?
Ich bedanke mich schonmal.
ich habe ein PHP-System von meinem Vorgänger übernommen und bin noch dabei einzusteigen.
Jetzt habe ich folgendes Problem gefunden:
Ich habe eine Textbox, in der ich ein Datum eingebe. Bis zum Datum 31.07.XXXX geht alles gut. Ab dem 01.08.XXXX wirft ein regulärer Ausdruck/JavaScript alles durcheinander.
Hier mal die Zeile:
'f=f.replace(/^\s+/, \'\').replace(/\s+$/, \'\').replace(/\s{2,}/, \' \'); try{var x=f.split(\'.\'); var d=new Date(); d.setYear(parseInt(x[2])); d.setMonth(parseInt(x[1])-1); d.setDate(parseInt(x)); if(isNaN(d)) return \'\'; var t=d.getDate(); if(!parseInt(t/10)) t=\'0\'+t; var m=d.getMonth()+1; if(!parseInt(m/10)) m=\'0\'+m; return t+\'.\'+m+\'.\'+d.getFullYear();}catch(e){return \'\';}'
Steigt hier jemand durch? Erkennt hier jemand den Fehler und kann mir sagen, wieso das Datum falsch ausgeworfen wird?
Ich bedanke mich schonmal.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 172623
Url: https://administrator.de/forum/fehler-in-regulaeren-ausdruck-javascript-172623.html
Ausgedruckt am: 06.04.2025 um 17:04 Uhr
6 Kommentare
Neuester Kommentar
f = f.replace(/^\s+/, '') . replace(/\s+$/, '') . replace(/\s{2,}/, ' ');
try {
var x=f.split('.');
var d=new Date();
d.setYear(parseInt(x[2]));
d.setMonth(parseInt(x[1])-1);
d.setDate(parseInt(x));
if (isNaN(d)) return '';
var t = d.getDate();
if (!parseInt(t/10)) t = '0' + t;
var m = d.getMonth()+1;
if (!parseInt(m/10)) m = '0' + m;
return t + '.' + m + '.' + d.getFullYear();
} catch(e) {
return '';
}
EDIT: der Bereich 'Javascript' ist bestimmt besser geeignet.
das Problem ist ein Eingabefehler - das Script geht davon aus, dass du '1.8.2011' eingibst.
edit: benutze mal das:
edit: benutze mal das:
'f=f.replace(/\s/g, \'\'); try{var x=f.split(\'.\'); var d=new Date(); d.setYear(parseInt(x[2]*1)); d.setMonth(parseInt(x[1]*1)-1); d.setDate(parseInt(x*1)); if(isNaN(d)) return \'\'; var t=d.getDate(); if(t<10) t=\'0\'+t; var m=d.getMonth()+1; if(m<10) m=\'0\'+m; return t+\'.\'+m+\'.\'+d.getFullYear();}catch(e){return \'\';}'
Es hat nichts mit den führenden Nullen zu tun - wenn das Date Objekt erzeugt wird erhält es intern das aktuelle Datum - setzt du nun den Tag auf 31 und der aktuelle Monat hat keinen 31. entsteht ein Fehler.
daher nochmal den Code angepasst:
daher nochmal den Code angepasst:
'f=f.replace(/\s/g, \'\'); try{var x=f.split(\'.\'); var d=new Date(x[2],x[1]-1,x); if(isNaN(d)) return \'\'; var t=d.getDate(); if(!parseInt(t/10)) t=\'0\'+t; var m=d.getMonth()+1; if(!parseInt(m/10)) m=\'0\'+m; return t+\'.\'+m+\'.\'+d.getFullYear();}catch(e){return \'\';}'