2010-02-17 4 views
3

J'utilisais une expression régulière pour les formats d'e-mail que je pensais être correcte mais le client se plaignait que l'expression soit trop stricte. Donc, ils sont revenus avec la condition suivante:Expression régulière pour certaines règles de messagerie électronique

L'email doit contenir un symbole "@" et se terminer par .xx ou .xxx ie. (.nl ou .com). Ils sont heureux avec ceci pour passer la validation. J'ai commencé l'expression pour voir si la chaîne contient un symbole « @ » comme ci-dessous

^(? =. * [@])

cela semble fonctionner, mais comment puis-je ajouter la dernière exigence (doit fin avec .xx ou .xxx)?

+0

En fonction de la langue utilisée, essayez: \ \ w {2,3} $ Mais il y a des fins domaind avec plus de 3 caractères.: * .info, ... – tur1ng

+1

@ turling: Et, en effet, .museum. –

+0

+1: Jamais entendu parler de celui-là ;-) – tur1ng

Répondre

2

Une regex qu'appliquer vos deux exigences est:

^[email protected]+\.[a-zA-Z]{2,3}$ 

Cependant, il existe des bibliothèques de validation de courrier électronique pour la plupart des langues qui fonctionneront généralement mieux qu'une expression régulière.

1

Essayez ceci:

([\w-\.]+)@((?:[\w]+\.)+)([a-zA-Z]{2,4})\be(\w*)s\b 

Un bon outil pour tester notre expression régulière: http://gskinner.com/RegExr/

+0

Bonne réponse, principalement, et le testeur RegExp chez gskinner est ce que j'utilise aussi. Je suis curieux de savoir pourquoi vous incluez littéralement "e" + n'importe quel espace + "s" à la fin. Votre expression échouera à [email protected], par exemple. Le simple fait d'utiliser ([\ w - \.] +) @ ((?: [\ W] + \.) +) ([A-zA-Z] {2,4}) \ b réussira. – Robusto

0

Vous pouvez utiliser

[@].+\.[a-z0-9]{2,3}$ 
+0

Les chiffres sont-ils autorisés dans les domaines de premier niveau? – tur1ng

+0

IP sont techniquement autorisés dans les e-mails ... c'est pourquoi j'ai ajouté le 0-9. – Dominik

2

Je l'utilise toujours pour les emails

  ^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}" + 
      @"\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\" + 
      @".)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$ 

Essayez http://www.ultrapico.com/Expresso.htm aussi!

2

Il n'est pas possible de valider chaque adresse e-mail avec RegEx mais pour vos besoins cette simple regex fonctionne. Il est ni complet, ni le fait dans aucune vérification de façon pour les erreurs, mais il répond exactement aux spécifications:

[^@][email protected]+\.\w{2,3}$ 

Explication:

  • [^ @] +: Faites correspondre un ou plusieurs caractères qui ne sont pas @
  • @:. Faites correspondre le @
  • +: apparier un ou plusieurs de tout caractère
  • \ .: correspondre a.
  • \ w {2,3}: Match 2 ou 3 mot-caractères (a-zA-Z)
  • $: Fin de chaîne
0

Cela devrait fonctionner:

^[^@\r\n\s]+[^[email protected]]@[^[email protected]][^@\r\n\s]+\.(\w){2,}$ 

Je l'ai testé contre ces e-mails non valides:

@[email protected] 
[email protected] 
exampledomain.com 
[email protected] 
[email protected] 
[email protected]@com 

[email protected] 

[email protected] 
[email protected]@il.company.co 
[email protected]@internal-email.company.co 

@test.com 
[email protected] 
[email protected]  
[email protected] 

Et ces e-mails valides:

[email protected] 
[email protected] 
[email protected] 

modifier

Celui-ci semble valider toutes les adresses de cette page wikipedia, mais il permet probablement des e-mails non valides aussi bien. La parenthèse se diviser en tout avant et après le @:

^([^\r\n]+)@([^\r\n]+\.?\w{2,})$ 

[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected][IPv6:2001:db8:1ff::a0b:dbd0] 
"much.more unusual"@example.com 
"[email protected]"@example.com 
"very.(),:;<>[]\".VERY.\"[email protected]\\ \"very\".unusual"@strange.example.com 
[email protected] 
[email protected] 
!#$%&'*+-/=?^_`{}|[email protected] 
"()<>[]:,;@\\\"!#$%&'*+-/=?^_`{}| ~.a"@example.org 
" "@example.org 
üñîçøðé@example.com 
üñîçøðé@üñîçøðé.com 
+2

Vous devriez jeter un oeil à: http://en.wikipedia.org/wiki/Email_address#Valid_email_addresses et http://data.iana.org/TLD/tlds-alpha-by-domain.txt – Toto

+0

Wow merci. Ceci est exactement ce que je cherchais. Probablement devrais avoir googlé avant que je commence à faire la regex. – Brett

Questions connexes