J'écris un script PHP qui accepte un motif d'expression régulier de l'utilisateur utilisé par Preg_Match (). Comment puis-je vérifier que le motif est valide? P>
7 Réponses :
juste tester cela.
Valeurs de retour: Preg_Match () renvoie
Le nombre de fois correspondre.
qui sera 0 fois 0 fois (pas de match)
ou 1 fois parce que Preg_Match () sera
Arrêtez de chercher après le premier match. strong>
Preg_Match_All () au contraire
continuer jusqu'à ce qu'il atteigne la fin de
matière. Preg_Match () renvoie false si
une erreur s'est produite. fort> p>
blockQuote> Preg_Match () Code>
retournera Faux code> si le motif n'est pas valide. P>
Selon le docs ,
Preg_Match () renvoie false si une erreur est survenue. P> blockQquote>
Le problème est qu'il va également lancer un avertissement. P>
Un moyen de faire face à cela est de supprimer la sortie du message d'erreur, de saisir la valeur de retour et de la sortie de la valeur. Erreur lors de l'utilisation de
error_get_last () code> s'il était faux. p>
quelque chose comme p>
xxx pré> Vous n'avez peut-être pas besoin du bit d'erreur Un environnement de production - cela dépend de votre configuration. p> p>
Vous savez, il n'est pas interdit d'utiliser @ code>: p
Devrait être si ($ match === false) code>
@Artefacto True, mais il a l'air si laid i>! :) @webBieve accueille, corrigé.
Si cela fonctionne pour quoi que ce soit? En essayant avec preg_match_all () code> (qui est définitivement renvoyé
false code>) et il vient de retourner
null code> (que je sais que cela ne le fait pas une erreur).
@Adam je suppose que ça devrait. Vous êtes sûr que vous nourrissez-la une regex défectueuse? Étrange.
@Pekka C'était le
Vous devez utiliser preg_match (...)! == False pour le vérifier car il peut retourner 0 s'il est valide mais ne correspond pas
Vous devriez comparer à FALSE: pcre.backtrack_limit code>. Je pensais que ce n'était pas la limite de chemin de recul car cette ligne a été commentée et qu'il ne me justifie aucune différence ... mais il s'avère que l'ajout de trois zéros à cela;
votes
if (preg_match($regex, $variable)) {
echo 'Valid';
}
else {
echo 'InValid';
}
si (Preg_Match ($ regex, $ variable)! == false) { code>. Le motif peut être valide, sans correspondance. Voir Docs
Vous pouvez utiliser Preg_Last_Error () pour obtenir des réponses. Page de détail: P>
http://php.net/manual/fr/function .preg-last-error.php p>
Merci! P>
Une solution simple consiste à supprimer l'avertissement avec un "@", puis vérifiez l'erreur par la suite: la chaîne que vous recherchez ( $ ip code> Dans ce cas) et le
Preg_Match Code> Valeur de retour - Peu importe si tout ce que vous voulez faire est de vérifier la syntaxe de l'expression régulière. p> p>
PHP a progressé un peu depuis que cette question a été posée pour la première fois (et répondit). Depuis PHP 5.2, vous pouvez simplement écrire ce qui suit, non seulement tester si l'expression régulière est valide, mais pour obtenir le message d'erreur détaillé s'il n'est pas le cas: placé dans une fonction p > démo p> p> p>