Mailinglisten-Archive |
Christoph Kramesch schrieb: >Maik Ryssel schrieb: > > >>Hallo, >> >>$string = "22:23:45" // Time >>preg_match("/^([01]{0,1}\d|2[0-3]):(0\d|[1-5]\d):(0\d|[1-5]\d)/",$string,$matches); >> >> >> >> >Mein Ansatz wär da mal ein ganz anderer.. ein explode mit ":" als >Trenner, dann müssen alle Werte numerisch sein, der Erste zwischen >0..24, der 2. und 3. zwischen 0..60 > > > Ok, benutze jetzt eine Mischung aus RegExe und Vergleich... Es geht grundsätzlich darum eine Datumsangabe inkl. Zeitangbe in ihre Einzelteile zu zerlegen und nur korrekte Datums/Zeiteingaben zuzulassen. Es soll aber sowohl Angaben mit und ohne führende "0" unterstützt werden. Hab es jetzt so gelöst: define('RGX_YEAR','([1-9]\d{3})'); define('RGX_MONTH','(\d{1,2})'); define('RGX_DAY','(\d{1,2})'); define('RGX_HOUR','(\d{1,2})'); define('RGX_MIN','(\d{1,2})'); define('RGX_SEC','(\d{1,2})'); define('RGX_TIME',RGX_HOUR.':'.RGX_MIN.':'.RGX_SEC); $string = '2006-10-32 23:31:46'; preg_match('?^'.RGX_YEAR.'-'.RGX_MONTH.'-'.RGX_DAY.'\s+'.RGX_TIME.'$?',$string,$matches); $day = (0 < (int) $matches[3] && 31 >= (int) $matches[3] ? (int) $matches[3] : false); $month = (0 < (int) $matches[2] && 12 >= (int) $matches[2] ? (int) $matches[2] :false); $year = $matches[1]; $hour = (24 >= (int) $matches[4] ? (int) $matches[4] : false); $min = (60 >= (int) $matches[6] ? (int) $matches[5] : false); $sec = (60 >= (int) $matches[6] ? (int) $matches[6] : false); echo "<pre>"; var_dump($year); var_dump($month); var_dump($day); var_dump($hour); var_dump($min); var_dump($sec); echo "</pre>"; $string = trim($string); Würd mich natürlich über Anregunge zur Verbesserung/Optimierungsvorschläge freuen Maik
php::bar PHP Wiki - Listenarchive