1

J'essaie de modifier une expression regex existante pour permettre un tiret entre les caractères, exactement comme le délimiteur de point.regex rejette une partie du premier groupe (commande)

^([\w]+(?:\.[\w]+)*(?:\-[\w]+)*){1,64}@((?:[\w]+\.)*\w[\w]{0,64})\.([a-z]{2,7})$ 

Je vais avoir des problèmes avec l'ordre: si j'utilise le trait d'union d'abord, puis le point, l'expression régulière ne tient pas tout à gauche du caractère avant point:

[email protected] ->my-coo[email protected] (ne me dérange pas l'espace vide).

La limite de longueur maximale pour les deux premiers groupes est 64, mais cela ne fonctionne pas, quand je mets plus de 64 caractères, il passe l'expression rationnelle, et il est valide. La longueur maximale du troisième groupe est de 7, et elle ne sera pas validée si c'est plus.

vous pouvez prendre comme exemple: a[email protected]aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aa est un bon résultat

et

aa[email protected]aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aa est un mauvais résultat.

Le premier exemple a 64 a s avant et après la @ et le second exemple ont 65 a s

https://regex101.com/r/yO1xH7/3

Je voudrais aussi faire la même chose après la @, mais il est plus compliqué que je pensais.

Des suggestions? Merci.

Répondre

1

Vous avez fait une petite erreur en plaçant le trait d'union. Ceci est la bonne:

^([\w]+(?:[\.\-][\w]+)*(?:[\w]+)*){1,64}@((?:[\w]+\.)*\w[\w]{0,64})\.([a-z]{2,7})$ 

Je suppose que vous ne comprenez pas parce que vous ne connaissez pas la fonction de ?:. C'est le groupe Regex qui ne capture pas. C'est destiné à éviter ce modèle là.

+0

Définir la limite de longueur que vous voulez, alors je peux vous aider –

+0

Je veux dire le définir avec un mot. Peut-être me donner un exemple de courrier électronique trop long qui passe l'expression rationnelle et ce qu'il devrait être –

+0

J'ai vu votre regex plusieurs fois. Je dois expliquer en langage ** humain **, pas en langage de code. Donne-moi le résultat attendu, et quel est le mauvais résultat actuel. Mettez à jour votre question et dites-moi quand cela sera fait. –