Date Format auslesen aus Textarea

...komplette Frage anzeigen

3 Antworten

Hello there,

um was rauszuschnipseln aus einem String, gibts eine einfache Methode, indem du einfach sagst, du willst nen Substring haben

=> http://www.php.net/substr

Das heißt du sagst, du willst die Zeichen 1-20 (als Beispiel) aus dem String haben. Fertig.

Wenn du wirklich intelligent das Datum rausschneiden willst, dann stellt PHP noch die Funktion preg_match zur Verfügung, damit kannst du etwas rausschneiden, was du vorher über einen Regulären Ausdruck definiert hast. Da kannst du wirklich sagen, schneide das raus, was das Format XX/XX/XXXX hast. Allerdings fragen wir da besser einen der sich damit auskennt, ich tues nämlich nicht :D

MfG

Alex

nex4k 25.12.2013, 16:14

Bei sowas komplexem ist das Verwenden von substr() und ähnlichen Funktionen eine Sysiphusarbeit und nur noch dämlich. Für sowas wurden Reguläre Ausdrücke erfunden ;)

1
Alextoexplain 25.12.2013, 16:25
@nex4k

Ja. Aber ich persönlich kann zum Beispiel keine regulären Ausdrücke und viele andere Anfänger wohl auch nicht :( Daher schlug ich beides vor.

0

Reguläre Ausdrücke sind dein bester Freund für dieses Problem.

Erst mit einem simplen Regex prüfen ob die Zeichenkette überhaupt das gewünschte Format hat (Absicherung gegen evtl. entstehende Folgefehler) und dann mit einem weiteren Regex mit Captures die einzelnen Teile der Zeichenkette auslesen und dann halt wie gewünscht verarbeiten.

Das hier sollte dir einen (ganz, ganz groben, oberflächlichen) Eindruck verschaffen, was Regexes sind und wofür/wie man sie verwendet:

http://tut.php-quake.net/de/regex.html

Der Inhalt dieser Seite reicht aber kaum aus um ein passendes Regex für dein Problem zu bauen.

Buchtipp: "Mastering Regular Expressions" von Jeffrey Friedl. Das einzige Buch über Regex, das du wirklich jemals brauchen wirst ;) Findet man auch auf den einschlägigen Webseiten im Internet...

nex4k 25.12.2013, 16:42

Das hier ist ein ziemlich simples Regex mit dem du sowohl das Format prüfen als auch die einzelnen Zahlen extrahieren kannst:

/^([0-9]{2})\/([0-9]{2})\/([0-9]{4}) ([0-9]{2}):([0-9]{2}) (AM|PM) - ([0-9]{2})\/([0-9]{2})\/([0-9]{4}) ([0-9]{2}):([0-9]{2}) (AM|PM)$/i

Wenn du nur das Anfangsdatum haben willst reicht das:

/^([0-9]{2})\/([0-9]{2})\/([0-9]{4})/

Wie du nun genau mit PHP ein Regex auf eine Zeichenkette anwendest und wie du die einzelnen Captures bekommst, schaust du am besten selbst in der PHP-Dokumentation nach. Schau nach den preg_*-Funktionen.

Bedenke allerdings, dass dieses Regex nicht prüft ob das Datum auch gültig ist. Es matcht ohne weiteres auch 32/00/9876 und ähnliches. Da es aber unmöglich ist mit einem Regex derart komplexe logische Prüfungen zu machen, solltest du lieber diese Variante wählen und dann mit PHP-Code die gematchten Teile auf Gültigkeit prüfen. (Rückgabewert von mktime() === false? Bzw. vor PHP 5.1 ... == -1?)

1
Alextoexplain 26.12.2013, 13:30
@nex4k

Klingt kompliziert, führt aber natürlich das aus, was ich selbst nicht formulieren könnte. Sehr gut ;)

0

Du schickst das ganze komplett an dein PHP-Skript (so wie sonst auch), extrahierst in PHP das Datum und schickst dann nur das Datum an MySQL

strtotime() hilft dir dabei

Alextoexplain 25.12.2013, 16:12

Er fragte aber glaub ich, wie er eben das Extrahieren macht. Ich hab da mal was ergänzt ;)

0

Was möchtest Du wissen?