2010-09-14 13 views

risposta

5

Basta testarlo. preg_match() restituirà FALSE se il modello non è valido.

Valori di ritorno: preg_match() restituisce il numero di volte che il modello corrisponde. Quello sarà o 0 volte (nessuna corrispondenza) o 1 volta perché preg_match() sarà interromperà la ricerca dopo la prima corrispondenza. preg_match_all() al contrario sarà continuare fino alla fine del soggetto . preg_match() restituisce FALSE se si è verificato un errore.

8

Secondo la docs,

preg_match() restituisce FALSE se si verifica un errore.

il problema è che verrà anche generato un avviso.

Un modo per gestire questo è eliminare l'output del messaggio di errore, rilevare il valore restituito e emettere l'errore utilizzando error_get_last() se era falso.

Qualcosa di simile

$old_error = error_reporting(0); // Turn off error reporting 

$match = preg_match(......); 

if ($match === false) 
{ 
    $error = error_get_last(); 
    echo $error["message"]; 
} 

error_reporting($old_error); // Set error reporting to old level 

Potrebbe non essere necessario l'errore di segnalazione bit in un ambiente di produzione - dipende dalla configurazione.

+0

+1 Per menzionare la soppressione dell'output del messaggio di errore. – Gumbo

+1

Sai, non è vietato usare '@': p – Artefacto

+0

Dovrebbe essere 'if ($ corrisponde === falso)' – webbiedave

0
if (preg_match($regex, $variable)) { 
    echo 'Valid'; 
} 
else { 
    echo 'InValid'; 
} 
+1

È necessario utilizzare preg_match (...)! == false per controllarlo perché può restituire 0 se è valido ma non lo fa non corrisponde a – mck89

+0

Si dovrebbe comparare a FALSE: 'if (preg_match ($ regex, $ variabile)! == FALSE) {'. Il modello può essere valido, senza corrispondenze. Vedi [docs] (http://nl2.php.net/manual/en/function.preg-match.php) – Lekensteyn

0

Ho pensato di aver visto un metodo per questo in MRE; risulta che era uno che Friedl scrisse a se stesso. Ecco lo listing.

-1

Non utilizzare @, utilizzare la barra rovesciata davanti a preg_match per generare l'eccezione nelle versioni più recenti di PHP (5.3+?).

tr{ 
    if (\preg_match($regex, $variable)===false) 
     echo 'Valid'; 
    else 
     echo 'InValid'; 
} 
catch(Exception $e) { 
    echo $e->getMessage(); die; 
} 
+0

Il backslash si riferisce solo al namespace globale. Altrimenti non fa nulla, nemmeno cambia il comportamento dell'errore. –

Problemi correlati