maik87

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.
Share on Facebook
Share on X (Twitter)
Share on Reddit
Share on Linkedin

Content-ID: 172623

Url: https://administrator.de/forum/fehler-in-regulaeren-ausdruck-javascript-172623.html

Printed on: July 18, 2025 at 01:07 o'clock

nxclass
nxclass Sep 06, 2011 at 10:56:51 (UTC)
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 '';  
}
... so - jetzt kann man es lesen ... Was für ein Ergebnis erwartest du denn ?

EDIT: der Bereich 'Javascript' ist bestimmt besser geeignet.
Maik87
Maik87 Sep 06, 2011 at 10:59:47 (UTC)
Danke!
Ich wusste nicht, wie das geht...
nxclass
nxclass Sep 06, 2011 at 11:13:14 (UTC)
du kannst ja mal den
try {
} catch() {
}
weglassen - dann spuckt er auch Fehlermeldungen aus.
nxclass
nxclass Sep 06, 2011 at 13:16:54 (UTC)
das Problem ist ein Eingabefehler - das Script geht davon aus, dass du '1.8.2011' eingibst.

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 \'\';}'  
Maik87
Maik87 Sep 06, 2011 at 13:47:00 (UTC)
Danke dir schonmal!
Teste ich morgen, wenn ich wieder im Lande bin.

Aber wieso geht dann 01.07.2011? Da sind doch auch führende Nullen drin.
nxclass
nxclass Sep 06, 2011 at 14:08:40 (UTC)
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:
'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 \'\';}'