2012-02-27 15 views
6

Buduję interfejs administratora, w którym użytkownik może zarządzać listą ciągów PCRE, które przekazywane są do PHP preg_match w innych punktach mojej aplikacji.Jak mogę sprawdzić, czy dany ciąg znaków jest poprawnym wprowadzeniem do preg_match PHP?

Przed przechowywaniem wejście użytkownika do późniejszego wykorzystania przez preg_match, to bym najpierw chciał potwierdzić, że wejście użytkownika jest poprawnym wyrażeniem PCRE, inaczej później na przekazanie go do preg_match zgłasza błąd.

Jaki jest najlepszy sposób sprawdzenia poprawności danego ciągu znaków, aby sprawdzić, czy jest to poprawne środowisko PCRE w PHP?

Odpowiedz

3

Najlepiej będzie po prostu przekazać ciąg do preg_match i złapać wszelkie błędy, które się zdarzają.

try{ 
    preg_match($in_regex, $string, $results); 
    //Use $results 
} catch (Exception $e) { 
    echo "Sorry, bad regex (/" . $in_regex . "/)"; 
} 

[Edytuj] Ponieważ to nie zadziała, możesz spróbować:

function bad_regex($errno, $errstr, $errfile, $errline){ 
    echo "Sorry, bad regex."; 
} 
set_error_handler("bad_regex"); 
preg_match($in_regex, $string, $results); 
restore_error_handler(); 
+0

Nie sądziłem 'preg_match' rzucił połów wyjątek ... pozwól mi spróbować. Jeśli się mylę, czuję się chytry! – Josh

+0

dodatkowo można użyć 'preg_last_error', aby uzyskać więcej informacji o błędzie – scibuff

+0

Tak, to nie zadziała. 'preg_match' nie wyrzuca wyjątku, powoduje, że' E_WARNING': 'Warning: preg_match(): Ogranicznik nie może być alfanumeryczny lub ukośnik odwrotny w linii" 4 ". Spowoduje to przerwanie procesu zapisywania mojej aplikacji, ponieważ nie mogę uchwycić tego ostrzeżenia i wznowić. – Josh

Powiązane problemy