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.
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']);
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.
le problème est que g
n'est pas un modificateur PCRE valide . Essayez de regarder preg_match_all .
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 .