Oct 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

Posted by Michael *Byte* Haszprunar

Defined tags for this entry: , , , ,
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
    Comment (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 ... Comment (1)

0 Comments

Display comments as(Linear | Threaded)
  1. No comments

Add Comment


Enclosing asterisks marks text as bold (*word*), underscore are made via _word_.
E-Mail addresses will not be displayed and will only be used for E-Mail notifications

To prevent automated Bots from commentspamming, please enter the string you see in the image below in the appropriate input box. Your comment will only be submitted if the strings match. Please ensure that your browser supports and accepts cookies, or your comment cannot be verified correctly.
CAPTCHA

You can use [geshi lang=lang_name [,ln={y|n}]][/geshi] tags to embed source code snippets.