Jörg Reinholz: Aus meiner Kiste

Beitrag lesen

Moin!

Die beste Variante wäre, ein weiteres Feld einzufügen, das die Nummer im normalisierten Format aufnimmt, also nur die Ziffern. Dann ist diese Information zwar redundant, aber manchmal muss das so sein, damit man sich das Leben erleichtern kann.

Die Abfrage ist dann ganz einfach. Aber wie bekommt man die Nummer normalisiert? Nun, für die bestehenden Daten einmal UPDATE drüberlaufen lassen, mit dem REPLACE() die Nicht-Ziffern rauswerfen. Wenn neue Daten hinzugefügt werden, dann kann das INSERT ein weiteres Feld mit der normalisierten Form einfügen. Die kann/muss dann von PHP erzeugt werden.

Jepp! Man kann sich zwar für Mysql (mariasql kann regex-replace) eine funktion schreiben, aber das dürfte recht aufwendig werden.

Also: Inserts, Updates und Vergleiche mit der "normalisierten" Form der Telefonnummer die in einer sorgfältig indexierten Spalte gespeichert werden (die andere dennoch (dann ohne Index) speichern!)

Aus meiner Kiste:

<?php
## filename: [/LIB-DIR/]ftx_cleartel.php
if ( -1 < strpos($_SERVER['PHP_SELF'],'ftx_cleartel.php')) {
   ftx_cleartel_test();
}

function ftx_cleartel_test() {
    $telefonnummern = array(
        '456789',
        '45 67 89',
        '0123 456789',
        '0123 45 67 89',
        '0123-45 67 89',
        '0049 123 45 67 89',
        '0049 123 45 67 89',
        '+49 123 45 67 89',
        '+49(0)123 45 67 89',
        '+49 (0) 123-45 67 89',
        '+33 2 123 123 123 123'
    );
    foreach ($telefonnummern as $t) {
        echo "\nOriginal: $t", "\nGeklärt:  ", ftx_cleartel($t), "\n";
    }
}

function ftx_cleartel($t, $clear_vw_de=TRUE) {
    $t=preg_replace( '/^\+{1,2}/', '00', trim($t) );
    $t=str_replace( '(0)', '', $t );
    $t=preg_replace('/[^\d]/', '', $t);
    if ($clear_vw_de) {
        $t=preg_replace('/^0049/', '0', $t);
    }

    return $t;
}

Ausgaben des Selbsttests:

Original: 456789
Geklärt:  456789

Original: 45 67 89
Geklärt:  456789

Original: 0123 456789
Geklärt:  0123456789

Original: 0123 45 67 89
Geklärt:  0123456789

Original: 0123-45 67 89
Geklärt:  0123456789

Original: 0049 123 45 67 89
Geklärt:  0123456789

Original: 0049 123 45 67 89
Geklärt:  0123456789

Original: +49 123 45 67 89
Geklärt:  0123456789

Original: +49(0)123 45 67 89
Geklärt:  0123456789

Original: +49 (0) 123-45 67 89
Geklärt:  0123456789

Original: +33 2 123 123 123 123
Geklärt:  00332123123123123

Jörg Reinholz