preg replace: mauvais regex = = "Inconnu Modificateur"?

j'invente de fausses adresses e-mail et je veux juste m'assurer qu'elles sont dans un format e-mail valide donc j'essaie de supprimer tout caractère qui n'est pas dans le jeu ci-dessous:

$jusr['email'] = preg_replace('/[^a-zA-Z0-9.-_@]/g', '', $jusr['email']);

Je n'ai eu aucun problème sur ma machine windows, mais sur le serveur Linux dev je reçois cette erreur chaque fois que ce code exécute:

Warning: preg_replace() [function.preg-replace]: Unknown modifier 'g' in /var/www/vhosts/....

je pense que c'est la chaîne regex, mais je ne peux pas l'épingler. Peu d'aide? Grâce.

Clarification: Je ne cherche pas à accommoder toutes les adresses e-mail valides (inutiles pour mon but), je dois juste comprendre ce qui ne va pas avec mon regex preg_replace.

8
demandé sur doub1ejack 2011-10-04 23:30:15

4 réponses

g n'est pas un modificateur valide dans PCRE (l'implémentation de regex utilise PHP) parce qu'il n'est tout simplement pas nécessaire; preg_replace() effectuera des remplacements globaux par défaut. Vous trouverez le modificateur dans le vrai Perl regex ainsi que le JavaScript regex, mais pas dans PCRE.

il suffit de laisser tomber le g :

$jusr['email'] = preg_replace('/[^a-zA-Z0-9.-_@]/', '', $jusr['email']);
26
répondu BoltClock 2011-10-05 00:12:26

vous avez un modificateur PCRE invalide. Voici la liste des modificateurs PCRE valides:

http://us.php.net/manual/en/reference.pcre.pattern.modifiers.php

le modificateur g (global) est on par défaut , donc vous n'en avez pas besoin.

3
répondu qJake 2011-10-04 19:32:31

le problème est que g n'est pas un modificateur PCRE valide . Essayez de regarder preg_match_all .

3
répondu 2011-10-04 19:33:47

en plus de /g, la partie interne de votre regexp ne semble pas non plus être valide:

[^a-zA-Z0-9.-_@]

tout d'abord, le " ^ " (qui est métachar de début d'entrée) n'a aucun sens à l'intérieur [...] (sauf si vous autorisez les adresses e-mail qui contiennent"^"). Deuxièmement, le tableau de bord doit être échappé ou mis à la fin du groupe, sinon il sera traité comme opérateur d'autonomie. Et le plus important, votre expression interdit une large gamme d'adresses e-mail parfaitement valides. De vérifier certains exemples .

3
répondu user187291 2011-10-06 13:15:04