Harry: preg_match, xter eigener Versuch mit relativem Erfolg

Beitrag lesen

Holladiewaldfee,

#   bigint(20) unsigned
#   set('EINS','ZWEI','DREI','VIER','FÜNF')
#   float(11,10)
#   enum('eins','zwei','sieben','12')

Wie ich es machen würde:
Zunächst mal würde ich ein Array mit Typen definieren (als Schlüssel) und als Wert den passenden regexp für den "Anhang". Also:

$blubb = array('bigint' -> '/[1]{1,2})\w?(unsigned)?$/s',
               'float' -> '/[2]{1,2}(,[0-9]{1,3})?)$/s',
               ...)

Dann würde ich den Typen mit explode an der öffnenden Klammer vom Schwanz hinten abtrennen:

$bla = explode('(', $typ, 2);

Überprüfung des Typs:
if(isset($blubb[strtolower($bla[0])])) ...

Überprüfung des Anhangs:
if(preg_match($blubb[strtolower($bla[0])], $bla[1], $matches)) ...

Dann kannst Du nach dem 2. if $matches verarbeiten

Das Problem dürfte sein, den passenden Ausdruck für die enum- und set-Dinger zu schreiben. Vielleicht wühlst Du da einfach mal den phpMyAdmin Source-Code durch und schaust, wie die das gelöst haben.

Ciao,

Harry

--
  Schnee :) Skitour gefällig?
  http://harry.ilo.de/projekte/berge/

  1. 0-9 ↩︎

  2. 0-9 ↩︎