2009-09-09 8 views
1

Je cherchais la validation par courriel. J'ai lu dans les spécifications RFC que consécutives . (point) ne sont pas autorisés, comme, mail..me @ server.com.Caractères sauvages consécutifs dans le courrier électronique

Mais des caractères différents sont-ils autorisés à se produire de manière consécutive? Comme, [email protected].

Et si oui, comment puis-je faire une expression régulière qui ne prendra qu'une seule occurrence de caractères sauvages tant qu'ils sont différents? Il ne doit pas accepter ceux comme, .. && $$, mais accepter les autres, &$ .$ &.

Et comme il y a une grande liste de caractères sauvages autorisés, je ne pense pas comme une expression régulière \^(&&|$$|..)\ etc, ne sont pas une option.

+0

Qu'est-ce qu'un "caractère sauvage" dans ce contexte? Je n'ai pas vu ça avant, assez confus. – unwind

Répondre

0

J'utiliserais une simple regex de validation d'email + une autre regex qui vérifie les caractères doubles comme/[. & $] {2}/

+0

C'est une très bonne idée. Merci. – rishi

5

Il existe quelques expressions rationnelles de validation de courrier électronique conformes à la norme RFC. Ils ne sont pas beaux, en fait, ils sont assez horribles, couvrant des centaines de caractères. Vous ne voulez vraiment pas en créer un, utilisez-le ou écrivez du code régulier que vous pouvez comprendre et maintenir.

Ceci est l'une des expressions rationnelles compatibles RFC

(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\]) 

Vérifier ce lien pour plus d'informations élargi et alternatives (plus pratique) Regexes http://www.regular-expressions.info/email.html

+0

Merci. C'est une grande aide. Je suppose que la validation par e-mail suit l'adage "Vous ne pouvez pas satisfaire tout le monde". :) – rishi

1

Les différents personnages comme $ sont autorisés à se produire plusieurs fois de suite , Oui. [email protected] est une adresse e-mail complètement valide.

+0

Pas beaucoup de services vous permettent d'avoir un mail avec $$. –

+0

C'est un facteur spécifique au service individuel, cela n'a rien à voir avec le fait que la spécification le permette ou non dans un sens général. – Amber

0

Je suppose que cela dépend de ce que vous faites avec cette validation d'email, mais je l'ai fait pendant des années dans les validateurs en ligne ASP.NET regex pour l'entrée de formulaire.

Pendant quelques mois, j'ai pensé que j'avais une expression régulière assez cool pour m'en occuper. Je l'ai trouvé en ligne et il semblait être populaire. Cependant, à plusieurs reprises, je reçois un appel d'un client essayant de remplir l'application où la validation du formulaire n'a pas aimé leur adresse e-mail. Et qui sait combien de personnes ont eu le même problème mais n'ont pas appelé.

J'ai appris la leçon à la dure, qu'il vaut mieux errer du côté de la gourmandise que d'essayer d'être trop strict. En d'autres termes, comme il y a tellement de règles pour définir ce qui rend une adresse e-mail valide (et invalide), je définis simplement une expression rationnelle libre pour couvrir toutes mes bases. Il peut également correspondre à certaines adresses e-mail non valides, mais à mes fins, ce n'est pas aussi important. D'ailleurs, très honnêtement - la plupart du temps si l'utilisateur est en train de bousiller son adresse email, il va y avoir une faute d'orthographe que regex ne va pas attraper de toute façon.

Alors, voici ce que j'utilise maintenant:

^[^<>\s\@]+(\@[\w\-]+(\.[\w\-]+)+)$ 

Et voici un exemple de travail pour tester ceci:

http://regexhero.net/tester/?id=b90d359f-0dda-4b2a-a9b7-286fc513cf40

Cela ne répond pas à votre principale préoccupation car cela correspond toujours consécutive points, tirets, etc Et je ne peux toujours pas prétendre que cela correspondra chaque adresse email valide parce que je ne sais pas honnêtement. Mais je peux dire que je l'utilise depuis 3 ans avec plus de 25 000 utilisateurs et pas une seule plainte.

0

Voir ces réponses:

stackoverflow.com/questions/997078/email-regular-expression

stackoverflow.com/questions/201323/what-is-the- plus régulière expression pour validants-adresses email

stackoverflow.com/questions/36261/test-expand-my-email-regex

Rappelez-vous, comme indiqué précédemment: la seule façon de dire si une adresse e-mail est vraiment valide est envoyer un courriel à elle!

+0

Envoyer un e-mail semble être une très bonne idée, mais il a toujours ses propres limites. Ceux-ci sont mentionnés dans cette page wiki: http://en.wikipedia.org/wiki/Callback_verification. Devinez qu'il n'y a pas un seul plan infaillible. – rishi

2

J'ai finalement utilisé quelque chose comme ceci:

/^([a-zA-Z0-9]+([\.\!\'\#\$\%\&\*\+\-\/\=\?\^\_\`\{\|\}\~]{0,1}))*[a-zA-Z0-9]+\@(([a-zA-Z0-9\-]+[\.]?[a-zA-Z0-9]+){0,2})[\.][a-zA-Z]{2,4}$/ 

Pas assez :) mais très bien servi mon cahier des charges.

+0

Mieux que des millions de longues bêtises de validation j'ai essayé, je me demande comment ils ont 70 + upvote. Chapeau à toi yaar :) –

Questions connexes