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[0])); 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[0])); 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.
6 Antworten
- LÖSUNG nxclass schreibt am 06.09.2011 um 12:56:51 Uhr
- LÖSUNG Maik87 schreibt am 06.09.2011 um 12:59:47 Uhr
- LÖSUNG nxclass schreibt am 06.09.2011 um 13:13:14 Uhr
- LÖSUNG nxclass schreibt am 06.09.2011 um 15:16:54 Uhr
- LÖSUNG Maik87 schreibt am 06.09.2011 um 15:47:00 Uhr
- LÖSUNG nxclass schreibt am 06.09.2011 um 16:08:40 Uhr
- LÖSUNG Maik87 schreibt am 06.09.2011 um 15:47:00 Uhr
- LÖSUNG Maik87 schreibt am 06.09.2011 um 12:59:47 Uhr
LÖSUNG 06.09.2011 um 12:56 Uhr
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[0]));
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.
LÖSUNG 06.09.2011 um 13:13 Uhr
LÖSUNG 06.09.2011 um 15:16 Uhr
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[0]*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 \'\';}'
LÖSUNG 06.09.2011 um 15:47 Uhr
LÖSUNG 06.09.2011 um 16:08 Uhr
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[0]); 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 \'\';}'