maik87
Goto Top

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.

Content-Key: 172623

Url: https://administrator.de/contentid/172623

Ausgedruckt am: 28.03.2024 um 13:03 Uhr

Mitglied: nxclass
nxclass 06.09.2011 um 12:56:51 Uhr
Goto Top
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.
Mitglied: Maik87
Maik87 06.09.2011 um 12:59:47 Uhr
Goto Top
Danke!
Ich wusste nicht, wie das geht...
Mitglied: nxclass
nxclass 06.09.2011 um 13:13:14 Uhr
Goto Top
du kannst ja mal den
try {
} catch() {
}
weglassen - dann spuckt er auch Fehlermeldungen aus.
Mitglied: nxclass
nxclass 06.09.2011 um 15:16:54 Uhr
Goto Top
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 \'\';}'  
Mitglied: Maik87
Maik87 06.09.2011 um 15:47:00 Uhr
Goto Top
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.
Mitglied: nxclass
nxclass 06.09.2011 um 16:08:40 Uhr
Goto Top
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 \'\';}'