2012-02-27 20 views
6

Sto costruendo un'interfaccia utente di amministrazione in cui un utente può gestire un elenco di stringhe PCRE che vengono passate allo preg_match di PHP in altri punti della mia applicazione.Come posso sapere se una determinata stringa è un input valido per preg_match di PHP?

Prima di archiviare l'input dell'utente per un utilizzo successivo da preg_match, desidero innanzitutto verificare che l'input dell'utente sia un'espressione PCRE valida, altrimenti in seguito il suo passaggio a preg_match genera un errore.

Qual è il modo migliore per convalidare una determinata stringa per verificare se è un PCRE valido in PHP?

risposta

3

La tua migliore scommessa sarà semplicemente passare la stringa a preg_match e rilevare eventuali errori che si verificano.

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

[Edit] Dal momento che non funziona, si potrebbe provare:

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

io non la pensano 'preg_match' ha gettato un'eccezione catturabile ... farmi provare questo. Se sbaglio, mi sento imbarazzato! – Josh

+0

inoltre è possibile utilizzare 'preg_last_error' per ottenere ulteriori informazioni sull'errore – scibuff

+0

Sì, questo non funzionerà. 'preg_match' non lancia un'eccezione, causa un' E_WARNING': 'Warning: preg_match(): il delimitatore non deve essere alfanumerico o rovesciato in - on line 4'. Questo interromperà il processo di salvataggio della mia app, dal momento che non riesco a catturare quell'avvertenza e riprendere. – Josh

Problemi correlati