2009-07-17 14 views
1

Gibt es eine Möglichkeit, den folgenden PHP-Code zu optimieren, so dass ich nur preg_replace und nicht preg_replace + substr verwenden kann?PHP: optimieren regexp + substr

$type = substr(preg_replace('/([^a-z])/', '$2', strtolower($_GET["type"])) , 0, 3); 
+4

Was wollen Sie tun? Es gibt übrigens keine "$ 2" in dieser Regex ... – Blixt

+0

In einigen Regexen werden fehlende Referenzen nur als leer behandelt, sodass die $ 2 effektiv nur die Übereinstimmungen entfernen können. –

+0

Ja, tut es, aber auch '' ''. – Blixt

Antwort

0

um ehrlich zu sein, ich es einfach halten würde und alarmieren nur den Benutzer, wenn sie eine ungültige Zeichenfolge eingegeben:

$type = $_GET['type']; 
if (!preg_match('/^[a-z]{0,3}$/', $type)) { 
    // Handle error properly here. 
    die('Type argument must be a string of 0-3 lower case letters (a-z)'); 
} 

wenn Sie wirklich die Eingabe korrigieren möchten, dann Ihre ursprüngliche solutio n war in Ordnung, es könnte nur ein wenig aufgeräumt werden:

$type = substr(preg_replace('/[^a-z]+/', '', strtolower($_GET['type'])), 0, 3); 
1

Da die Menschen in den Kommentaren erwähnt, Ihre Codebeispiel irgendwie dysfunktional ist, aber wenn ich verstehe, was Sie richtig machen wollen (Empfängt die ersten drei Kleinbuchstaben), dann dies sollte es tun:

$type = preg_replace('/.*?([a-z])(?:.*?([a-z]))?(?:.*?([a-z]))?.*/', '$1$2$3', strtolower($_GET['type']));