8
votes

Comment attraper un modèle Preg_Match non valide?

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?


0 commentaires

7 Réponses :


5
votes

juste tester cela. Preg_Match () retournera Faux si le motif n'est pas valide.

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. 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.


0 commentaires

9
votes

Selon le docs ,

Preg_Match () renvoie false si une erreur est survenue.

Le problème est qu'il va également lancer un avertissement.

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 () s'il était faux.

quelque chose comme xxx

Vous n'avez peut-être pas besoin du bit d'erreur Un environnement de production - cela dépend de votre configuration.


6 commentaires

Vous savez, il n'est pas interdit d'utiliser @ : p


Devrait être si ($ match === false)


@Artefacto True, mais il a l'air si laid ! :) @webBieve accueille, corrigé.


Si cela fonctionne pour quoi que ce soit? En essayant avec preg_match_all () (qui est définitivement renvoyé false ) et il vient de retourner null (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 pcre.backtrack_limit . 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;


0
votes

Je pensais avoir vu une méthode pour cela dans MRE ; s'avère que c'était un Friedl écrit lui-même. Voici le Liste .


0 commentaires

2
votes

Vous pouvez utiliser Preg_Last_Error () pour obtenir des réponses. Page de détail:

http://php.net/manual/fr/function .preg-last-error.php

Merci!


0 commentaires

2
votes

Une solution simple consiste à supprimer l'avertissement avec un "@", puis vérifiez l'erreur par la suite: xxx

la chaîne que vous recherchez ( $ ip Dans ce cas) et le Preg_Match Valeur de retour - Peu importe si tout ce que vous voulez faire est de vérifier la syntaxe de l'expression régulière.


0 commentaires

0
votes

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: xxx

placé dans une fonction xxx

démo


0 commentaires