Sto scrivendo uno script PHP che accetta un modello di espressione regolare da parte dell'utente che è usato da preg_match(). Come posso verificare che il modello sia valido?Come posso rilevare un modello preg_match non valido?
risposta
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.
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.
if (preg_match($regex, $variable)) {
echo 'Valid';
}
else {
echo 'InValid';
}
È necessario utilizzare preg_match (...)! == false per controllarlo perché può restituire 0 se è valido ma non lo fa non corrisponde a – mck89
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
È possibile utilizzare preg_last_error() per ottenere risposte. pagina di dettaglio:
http://php.net/manual/en/function.preg-last-error.php
Grazie!
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;
}
Il backslash si riferisce solo al namespace globale. Altrimenti non fa nulla, nemmeno cambia il comportamento dell'errore. –
- 1. Stato modello non valido
- 2. Come posso sapere se una determinata stringa è un input valido per preg_match di PHP?
- 3. Un modello di regex non valido
- 4. utilizzando preg_match per rilevare i caratteri persiani (farsi) nella stringa
- 5. Non posso rilevare un'eccezione
- 6. Come posso rilevare caratteri non occidentali?
- 7. PHP Regex preg_match extraction
- 8. come posso rilevare se window.location non è riuscito?
- 9. java dateformat carattere modello non valido 'y'
- 10. PHP preg_match stringa intera
- 11. Come posso rilevare automaticamente un proxy?
- 12. Come posso rilevare un palindromo in ebraico?
- 13. Come posso rilevare un palindromo in C?
- 14. Come posso ottenere "ORA-00904:: identificatore non valido" da un pacchetto valido?
- 15. modello fallisce la compilazione: 'doppio' non è un tipo valido per un modello costante di parametri
- 16. Come posso ottenere solo acquisizioni con nome da preg_match?
- 17. identificatore override come parametro modello - è valido?
- 18. "preg_match(): Compilazione non riuscita: parentesi senza eguali" in PHP testo valido
- 19. Come posso rilevare un errore di rendering/modello mancante in node.js usando express.js?
- 20. Come convertire eregi in preg_match?
- 21. Come rilevare un modello di codice QR in un'immagine?
- 22. Come risolvere un gemspec non valido?
- 23. preg_match caratteri speciali
- 24. Posso contrassegnare un campo non valido da javascript?
- 25. preg_match per più parole
- 26. preg_match indirizzo php strada
- 27. PHP preg_match non corrispondenti linea passato rompe
- 28. Rails non valido datetime sui risultati del modello in nil
- 29. Come posso rilevare caratteri non stampabili in .NET?
- 30. Come posso cancellare un modello di sito?
+1 Per menzionare la soppressione dell'output del messaggio di errore. – Gumbo
Sai, non è vietato usare '@': p – Artefacto
Dovrebbe essere 'if ($ corrisponde === falso)' – webbiedave