189 votes

Comment diviser une longue expression régulière en plusieurs lignes en JavaScript ?

J'ai une expression régulière très longue, que je souhaite diviser en plusieurs lignes dans mon code JavaScript afin de conserver une longueur de 80 caractères pour chaque ligne, conformément aux règles de JSLint. C'est tout simplement mieux pour la lecture, je pense. Voici un exemple d'expression régulière :

var pattern = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;

1voto

Bart Kiers Points 79069

Personnellement, j'opterais pour une regex moins compliquée :

/\S+@\S+\.\S+/

Bien sûr, c'est moins précis que votre modèle actuel, mais qu'essayez-vous d'accomplir ? Essayez-vous d'attraper les erreurs accidentelles que vos utilisateurs pourraient saisir, ou craignez-vous que vos utilisateurs essaient de saisir des adresses invalides ? Si c'est le premier cas, je choisirais un modèle plus simple. Dans le second cas, une vérification par réponse à un e-mail envoyé à cette adresse pourrait être une meilleure option.

Cependant, si vous souhaitez utiliser votre modèle actuel, il serait (IMO) plus facile à lire (et à maintenir !) en le construisant à partir de sous-modèles plus petits, comme ceci :

var box1 = "([^<>()[\]\\\\.,;:\s@\"]+(\\.[^<>()[\\]\\\\.,;:\s@\"]+)*)";
var box2 = "(\".+\")";

var host1 = "(\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])";
var host2 = "(([a-zA-Z\-0-9]+\\.)+[a-zA-Z]{2,})";

var regex = new RegExp("^(" + box1 + "|" + box2 + ")@(" + host1 + "|" + host2 + ")$");

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X