Portal > Foren > PHP > PHP-Programmierung > regexp Datums-Vervollständigung
Antwort
 
Themen-Optionen
Alt 12.02.2006, 10:56 Nach oben    #1
Erfahrener Benutzer
 
Registriert seit: 30.10.2005
Beiträge: 279
Standard regexp Datums-Vervollständigung

Hallihallo,
Ich hab hier ein Formular für DAUs wo man ein Datum eingeben muss. Problem ist hierbei mein (erster) selbstentworfener regexp. In der Funktion wird das übergebene Datum 01.01.06 einfach vom bestmöglich zur dürftigsten Möglichkeit abgeprüft und vervollständig, checkdate, etc. lassen wir mal vorneweg. Ich komm von hinten und ergänz dann grade das Datum mit der aktuellen Zeit, wenn was fehlt. So funktioniert das ganz gut, allerdings geht folgendes durch: allerdings kommen eingaben wie
01.01.........
01....
durch
So wie es aussieht wird am Ende des Datum jeder angehängte Punkte akzeptiert was aber nicht sein soll. Erlaubte Dinge sollen entweder
01.01.06
01.01.
01.

Je nachdem was dann fehlt wird von mir ergänzt
Falls jemand einen besseren Ausdruck hat...als her damit.

PHP-Code:
if (preg_match('/^\d{1,2}\.\d{1,2}\.\d{2,4}+$/'$date)) {
            list (
$day$month$year) = explode('.'$date);
        }
        elseif (
preg_match('/^\d{1,2}\.\d{1,2}\.+$/'$date)) {
            list (
$day$month) = explode('.'$date);
            
$year date('y'time());
        }
        elseif (
preg_match('/^\d{1,2}\.+$/'$date)) {
            list (
$day) = explode('.'$date);
            
$month date('m'time());
            
$year date('y'time());
        } else {
            return 
FALSE;
        } 
ex³ ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.02.2006, 11:21 Nach oben    #2
Jay
Gast
 
Beiträge: n/a
Standard

http://at2.php.net/checkdate

Verwende die Funktion und sieh dir die Kommentare an.
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.02.2006, 11:40 Nach oben    #3
Erfahrener Benutzer
 
Registriert seit: 30.10.2005
Beiträge: 279
Standard

Meinst du das hier http://at2.php.net/manual/de/functio...date.php#54989 ?

Den Reg-Ausdruck oder was ist mit checkdate? Ich vervollständige erst die User Eingaben und dann kommt checkdate.
ex³ ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.02.2006, 11:42 Nach oben    #4
Jay
Gast
 
Beiträge: n/a
Standard

PHP-Code:
if (!checkdate(..))
return 
false
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.02.2006, 11:48 Nach oben    #5
Erfahrener Benutzer
 
Registriert seit: 30.10.2005
Beiträge: 279
Standard

Was willst du? Mir zeigen wie checkdate funktioniert? Es geht hier um den RegExp also einen "Reguleren Ausdruck".

Folgende Dinge sollen erlaubt sein 01.01.06, 01.01. und 01.
Allerdings erlaubt mein Ausdruck folgendes 01......, 01.01...... beliebig viele Punkte.
ex³ ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.02.2006, 12:07 Nach oben    #6
Jay
Gast
 
Beiträge: n/a
Standard

dein ausdruck erlaubt auch folgendes: 00.00.... . deinen ausdruck kann man vergessen, wenn du schon willst dann nimm eine richtigen von php.net.
Ich glaube aber nicht, das du weißt was die Ausdrücke auf php.net machen, deshalb würde ich dir folgende Lösung vorschlagen.

PHP-Code:
if (!is_int($day)||!is_int($year)||!is_int($month))
return 
false;
else if (!
checkdate($month,$day,$year))
return 
false
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.02.2006, 12:30 Nach oben    #7
Erfahrener Benutzer
 
Registriert seit: 30.10.2005
Beiträge: 279
Standard

Das 00.00 möglich ist klar dafür kommt aber wie erwähnt am Ende nochmal checkdate zum abrunden des Ganzen. Tag, Monat und Jahr kommen ja von einem String per explode, allerdings muss der String ja stimmen. Es geht nicht darum das Datum zu prüfen sondern je nach Eingabe zu ergänzen, je nachdem was der User eingetragen hat. Ganz am Ende kommt checkdate und checkt das nochmal durch. Es geht hier nur um den Ausdruck und das Problem mit den Punkten am Ende.
Wenn dir mein Schnippsel zu anstrengend lass es halt, dein schnellen Posts helfen auch nich. Ich warte mal bis Montag da sind wieder Kompetente Leute unterwegs. Schönen Sonntag noch!
ex³ ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.02.2006, 12:37 Nach oben    #8
Jay
Gast
 
Beiträge: n/a
Standard

Zitat:
Montag da sind wieder Kompetente unterwegs
nur weil du keine Ahnung von Reguläre Ausdrücken hast, brauchst du deine Wut nicht an mir auslassen. Deine drei Ausdrücke kann man leicht zu einem machen.

Da du ja nur Hilfe von kompetenten Leute willst, werde ich meinen Ausdruck mal nicht posten.
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.02.2006, 13:32 Nach oben    #9
Erfahrener Benutzer
 
Registriert seit: 18.03.2005
Beiträge: 591
Standard

Der reguläre Ausdruck oben geht nie so richtig.

Beispiel:
http://www.cix88.de/cix_php/php_rege...um_pruefen.php
CIX88 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.02.2006, 15:04 Nach oben    #10
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.212
Standard

@CIX: könnte man die Überprüfung des Jahres nicht auch noch zusammenfassen?

also anstelle
PHP-Code:
$pattern '~(0[1-9]|(1|2)[0-9]|3[0-1])\.(0[1-9]|1[0-2])\.(19[0-9][0-9]|20[0-9][0-9])~'
ein
PHP-Code:
$pattern '~(0[1-9]|(1|2)[0-9]|3[0-1])\.(0[1-9]|1[0-2])\.((19|20)[0-9][0-9])~'


---------

getestet: joh, geht!

*stolz*
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.02.2006, 16:16 Nach oben    #11
Erfahrener Benutzer
 
Registriert seit: 18.03.2005
Beiträge: 591
Standard

Ja hast völlig recht.
Hatte ich erst so geschrieben, weil ich Anfangs erst von einem gewissen Jahr bis zu einem gewissen Jahr probiert hatte.
Die Angabe vom Jahr kann auch so erfolgen: ((19|20)[0-9]{2})
CIX88 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Regexp umstellen von " auf ' bei preg_match_all dago PHP-Programmierung 8 02.02.2007 21:33
Werte in einen Regexp einsetzen. ex³ PHP-Programmierung 6 02.02.2007 07:27
Was macht mein regexp? ex³ PHP-Programmierung 3 05.11.2006 11:52
[PHP] Regexp und die Gierigkeit CIX88 Tutorials 0 29.01.2006 13:36
[MySQL] REGEXP Problem Jay Datenbanken 3 27.12.2005 13:52


Alle Zeitangaben in WEZ +2. Es ist jetzt 09:18 Uhr.


Powered by vBulletin® Version 3.7.3 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44