2011-09-03 3 views
2

Je suis en train d'utiliser une expression régulière de http://www.regular-expressions.info/email.html, en particulier:php - Attention: filter_var() [function.filter-var]: Unknown modificateur '+'

[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])? 

Cependant lorsque vous utilisez ce ainsi:

filter_var($email, FILTER_VALIDATE_REGEXP, array("options"=>array("regexp"=>$pattern))) 

Il évoque l'erreur:

Warning: filter_var() [function.filter-var]: Unknown modifier '+' 

Est-ce que quelqu'un sait comment résoudre ce problème?

+1

Votre patron est-il entouré de délimiteurs et avez-vous tout échappé correctement? Par exemple. '$ pattern =" /[a-z0-9!#$%&'*+\/=?<_\'{|}~-]+(?:\\&[4-) % & '* + \/=?^_ \ '{|} ~ -] +) * @ (?: [a-z0-9] (?: [a-z0-9 -] * [a-z0- 9])? \\.) + [A-z0-9] (?: [A-z0-9 -] * [a-z0-9])?/I ";' – DaveRandom

+0

@DaveRandom Merci pour l'aide Dave , il n'a évidemment pas inclus les délimiteurs. Si je suis honnête, je ne sais rien sur les expressions régulières, j'ai besoin de lire. –

Répondre

5

Il manque des délimiteurs dans votre expression rationnelle. L'insertion, disons, d'un point-virgule avant et après le motif va corriger cela.

Cependant, vous devez vraiment utiliser filter_var($email, FILTER_VALIDATE_EMAIL) au lieu de rouler votre propre (incorrect) regexp.

+0

FILTER_VALIDATE_EMAIL a ses problèmes et n'est pas parfait, je ne cherche pas une solution parfaite juste celle qui frappe la majorité et je voulais juste tester celle-ci (je ne l'ai pas fait). Je vais probablement utiliser FILTER_VALIDATE_EMAIL, mais j'ai l'intention de faire des guillemets simples invalider l'email, si le RFC dit ou non qu'ils sont légaux. –

+0

@Alex De quels problèmes parlez-vous? Avez-vous envisagé de déposer un bug contre php pour supprimer ces problèmes? Et pourquoi utilisez-vous votre propre définition de ce qui constitue une adresse e-mail légale? – phihag

Questions connexes