Okt 19
Hi,

Ich bin bei einem Portal das ich programmiert habe über eine ziemlich fiese Sache gestolpert die ich euch nicht vorenthalten will. Im Prinzip geht es um ein Eingabefeld das ein Datum im Format "Monat/Jahr" (m/Y) erwartet.

Da ich schon ein paar Teiel vom Zend Framework verwendet habe wollte ich hier mal die geniale Funktion "isDate()" verwenden, die verspricht einen String gegen einen gegebenen Formatstring zu prüfen. In meinen Ohren klang das wie "Regex für Datum" und ich bin mir sicher ich bin nicht der Einzige dem das so geht.

Mein Formatstring war also "MM/yyyy", so wie es das ZF-Manual angibt. Es klappte zunächst auch wunderbar, denn "1/2009" wurde genau schön als true validiert wie "12/2009". Die Positives funktionierten also schonmal.

Aber das Problem ist: isDate() arbeitet nicht wie ein Regex. Es versucht nämlich - wie Excel auch - den Anwender zu bevormunden und irgendwie ein gültiges Datum zu erkennen. Das ist nicht nur nervig, es macht damit den Sinn des Ganzen zunichte. So wird ein String wie "03.2009" auch als true erkannt, obwohl in meiner Formatvorgabe ganz klar ein Slash drinsteht. Noch viel schlimmer ist dass total unsinniges Zeug auch als true validiert.

Ein Beispiel [1]:
isDate('1111','dd.MM.yyyy') ==> true WTF?
Hintergrund hier ist dass Zend_Date das so liest:
1111 -> 1.1.11 -> 01. Jan.2011 -> true

Erinnert wie gesagt stark an Excel wo genau dieses Verhalten auch jeden nervt weil es einfach nicht das tut was man dem Ding sagt sondern es tut das was es meint das man wollte. Es gibt echt nix Schlimmeres als Doftware die versucht intelligent zu sein statt einfach nur so zu funktionieren wie es sollte.

Spätestens mit dem letzten Beispiel hat isDate() für mich jeglichen Nutzen verloren. Aus dem "super, ich hab eine einfache Regex für Datumseingaben gefunden" wurde ein "verdammter Dreck, der macht ja alles falsch. Muss ich wohl doch selbst schreiben". Darüber hinaus wird isDate() auch bei Zend_Form_Validator_Date verwendet, also passt auf wenn ihr das verwendet, es kommt auch lauter komisches Zeug als true durch...

Byte gefrustet vom ZF

[1] nachzulesen ist das hier: Zend Bug #7583

Geschrieben von Michael *Byte* Haszprunar

Tags für diesen Artikel: , , , ,
Bookmark Zend Date isDate() oder "Ich hasse Software die mich bevormunden will"  at del.icio.us Digg Zend Date isDate() oder "Ich hasse Software die mich bevormunden will" Technorati Zend Date isDate() oder "Ich hasse Software die mich bevormunden will"

1 Trackbacks

  1. blog.zf-info.de

    PingBack
    Kommentar (1)

  2. Zend Framework Blog

    Ist Zend_Date::isDate() wirklich so schlecht?
    Habe heute morgen in meinem Feedreader einen Verriss zur Funktion Zend_Date::isDate() gefunden. Michael geht mit dieser Funktion dabei sehr hart ins Gericht, weil sie nicht genau das macht, was er erwartet. Er übergibt Datumsangaben und versucht diese ... Kommentar (1)

0 Kommentare

Ansicht der Kommentare: (Linear | Verschachtelt)
  1. Noch keine Kommentare

Kommentar schreiben


Umschließende Sterne heben ein Wort hervor (*wort*), per _wort_ kann ein Wort unterstrichen werden.
Die angegebene E-Mail-Adresse wird nicht dargestellt, sondern nur für eventuelle Benachrichtigungen verwendet.

Um maschinelle und automatische Übertragung von Spamkommentaren zu verhindern, bitte die Zeichenfolge im dargestellten Bild in der Eingabemaske eintragen. Nur wenn die Zeichenfolge richtig eingegeben wurde, kann der Kommentar angenommen werden. Bitte beachten Sie, dass Ihr Browser Cookies unterstützen muss um dieses Verfahren anzuwenden.
CAPTCHA

Sie können [geshi lang=LANG][/lang] Tags verwenden um Quellcode abhängig von der gewählten Programmiersprache einzubinden