Tom: preg_match, xter eigener Versuch mit relativem Erfolg

Beitrag lesen

Hello,

#   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:

Das ist gar nicht dumm, weil das die Sicherheit gibt, dass nur definierte Typen erkannt werden können.

$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);

Das geht nicht, weil es ja auch welche gibt, die keine Längenangaben haben. Und unsigned Strings gibts nicht. Hate ich auch noch drüber nachgedacht, ob sowas passieren könnte. Ist dann aber ein Fehler.

Ü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.

Das habe ich alles schon fertig und es funktioniert bestens. Da werden automatisch die <Select> oder die radio bzw. checkbox erstellt und auch wieder in Empfang genommen nach dem Post.

Aber die Sache mit dem Type-Array ist wirklich nicht verkehrt.

Liebe Grüße aus http://www.braunschweig.de

Tom

--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen

  1. 0-9 ↩︎

  2. 0-9 ↩︎