Je sais que cette question a été posée une douzaine de fois, mais techniquement ce n'est pas une arnaque (vérifiez les autres questions si vous le souhaitez) ;)
Fondamentalement, j'ai une regex Javascript pour vérifier l'adresse e-mail pour la validation frontend, et j'utilise CodeIgniter pour vérifier le backend au cas où la validation frontend ne fonctionnerait pas correctement (problème de navigateur) par exemple. ) Il s'agit d'une expression régulière assez longue et je ne sais pas par où commencer pour la convertir manuellement.
Je recherche un outil pour convertir une regex JS en regex PHP- Je ne l'ai trouvé dans aucune réponse à des questions similaires (bien sûr, il est possible qu'un tel outil n'existe pas.) Eh bien, j'ai menti - l'un d'eux a suggéré un outil qui coûte 39,95 $, mais je ne veux vraiment pas dépenser autant pour convertir une seule expression (non, il n'y a pas d'essai gratuit, comme le suggère la réponse à la question ci-dessus.)
Il s'agit d'une expression Javascript, généreusement fournie par aSeptik :
/^((([a-z]|d|[!#$%&'*+-/=?^_`{|}~]|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])+(.([a-z]|d|[!#$%&'*+-/=?^_`{|}~]|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])+)*)|((x22)((((x20|x09)*(x0dx0a))?(x20|x09)+)?(([x01-x08x0bx0cx0e-x1fx7f]|x21|[x23-x5b]|[x5d-x7e]|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])|(\([x01-x09x0bx0cx0d-x7f]|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF]))))*(((x20|x09)*(x0dx0a))?(x20|x09)+)?(x22)))@((([a-z]|d|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])|(([a-z]|d|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])([a-z]|d|-|.|_|~|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])*([a-z]|d|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF]))).)+(([a-z]|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])|(([a-z]|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])([a-z]|d|-|.|_|~|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])*([a-z]|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF]))).?$/i
Il y a aussi celui utilisé par CodeIgniter, que je ne souhaite pas utiliser car il ne suit pas les mêmes règles (n'autorise pas certaines adresses valides) :
/^([a-z0-9+_-]+)(.[a-z0-9+_-]+)*@([a-z0-9-]+.)+[a-z]{2,6}$/ix
Je souhaite utiliser les mêmes règles définies par les expressions régulières Javascript en PHP.
J'ai cette incohérence où mon code frontal indique que l'adresse e-mail est OK, puis Codeigniter dit non, ce qui est bien sûr le comportement que j'essaie de corriger dans l'application.
Merci pour tous les conseils ! :D
Il existe quelques différences entre les moteurs d'expressions régulières en Javascript et PHP. Veuillez vérifier la comparaison des moteursregexLes articles fournissent des connaissances théoriques,Différences entre les expressions régulières PHP et les expressions régulières JavaScriptLes réponses fournissent des informations pratiques.
La plupart du temps, vous pouvez utiliser des modèles d'expressions régulières Javascript en PHP avec seulement des modifications mineures. Comme différence fondamentale, les expressions régulières PHP sont définies comme une chaîne (ou dans une chaîne) comme ceci :
Les expressions régulières Javascript ne le sont pas, elles sont définies à sa manière :
Vous pouvez l'essayer en exécutant des expressions régulières sur PHP. Il est recommandé de ne pas le remplacer dans les fichiers Codeigniter, vous pouvez simplement étendre ou remplacer la bibliothèque native. Vous pouvez consulter laCréer une bibliothèquepour plus d'informations.
J'ai pu résoudre ce problème d'une meilleure manière que prévu. Je ne pouvais pas convertir l'expression régulière Javascript que je voulais utiliser (même après avoir acheté RegexBuddy - cela serait utile, mais cela ne produirait pas la conversion correcte), j'ai donc décidé de consulter le site WebRegex Verify Email Addresset voir ce qu'ils ont. Y a-t-il une suggestion pour une bonne expression régulière. C'est alors que j'ai découvert ceci :
"L'expression la plus performante est de loin celle utilisée par les PHP
filter_var()
":Il ne correspondait qu'à 4/86 erreurs, tandis que le Javascript que j'ai utilisé correspondait à 8/86 erreurs, donc celui de PHP est plus précis. J'ai donc étendu CodeIgniter
Form_validation
库,改为使用return filter_var($str, FILTER_VALIDATE_EMAIL);
....mais est-ce que ça marche en Javascript ?
Zing! Fonctionne miraculeusement ! Non seulement j’ai obtenu la cohérence que je recherchais entre la validation front-end et back-end, mais j’ai également obtenu des expressions régulières plus précises au cours du processus. Gagnant-gagnant !
Merci à tous ceux qui ont fourni des suggestions !