Regex pour la validation de plusieurs adresses E-Mail Adresses
J'ai une Regex qui valide mon email-adresses comme ceci:
([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})(\]?)
Cela fonctionne parfaitement bien, mais ne permet qu'une seule adresse e-mail pour être entré. Maintenant, je voulais prolonger et de permettre à plusieurs mail adresses à ajouter (comme MS Outlook, par exemple), avec un point-virgule comme mail-splitter.
[email protected];[email protected];[email protected]
Maintenant, je l'ai cherché et trouvé celui-ci:
([A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}(;|$))
Cela fonctionne sur un point, mais malheureusement nécessite un point-virgule à la fin d'un mail:
mail1@tld.com;
Ce n'est pas ce que je veux que lorsque l'utilisateur ne saisit un e-mail.
Comment puis-je prolonger mon expression régulière ci-dessus (la première) pour permettre à plusieurs mail adresses à être ajoutés lors de la laisser être séparés par un point-virgule?
- Vous pouvez écrire une fonction qui fera le fractionnement pour vous, puis d'effectuer la regex sur chaque e-mail.
- double possible de Comment faire pour utiliser une expression régulière pour valider un adresses e-mail? - lien de l'expression régulière - ex-parrot.com/~pdw/Mail-RFC822-Address.html (environ une page).
- n'oubliez pas, que les adresses e-mail peut être très difficile à valider, par exemple, foo@host est une adresse valide
- stackoverflow.com/questions/9780582/...
Vous devez vous connecter pour publier un commentaire.
C'est votre expression d'origine, modifiée de sorte qu'elle permet à de nombreux e-mails séparés par des point-virgules et (éventuellement) des espaces d'ailleurs le point-virgule. Il permet également une adresse mail qui n'est pas au point-virgule.
Cela permet d'entrées vides (pas d'adresses e-mail). Vous pouvez modifier la finale * en + d'exiger au moins une adresse.
Si vous avez besoin pour permettre à virgule, en dehors de point-virgule, vous pouvez chage de ce groupe:
par celui-ci:
Remarque importante: comme indique dans le commentaire de Martin, s'il y a des texte avant ou après la bonne adresse email de la liste, la validation échouera pas. Donc, il travail comme un "email searcher". Pour le faire fonctionner comme un validateur vous devez ajouter
^
au début de la regex, et$
à la fin. Cela permettra d'assurer que l'expression correspond à l'ensemble du texte. L'réexe serait:Vous pouvez ajouter un
\s*
après la^
à tolérer les espaces au début de la liste, comme ça. I. e. inclure^\s*
au lieu de simplement^
L'expression déjà tolère les blancs à la fin comme c'est.^((?:(?:[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})(?:\]?)(?:\s*;\s*|\s*$))*)$
Old post - besoin de la même RegEx. L'on a accepté la réponse n'a pas de travail pour moi, cependant, ce n'.
Extrait de ce post, cependant, l'on a accepté la réponse n'a pas de travail, soit, mais les Regex sur le lien DANS le post n'.
[email protected]
- valide[email protected];[email protected]
- valide[email protected];
- ne pas validerempty string
- valideSi vous souhaitez valider à l'encontre d'une chaîne vide, puis retirez le
|
au début de la regexPourquoi ne pas simplement divisés sur le point-virgule puis de valider le potentiel adresse de courriel à l'aide de votre regexp ? L'écriture d'un énorme regexp va être très difficile et un entretien cauchemar, je le soupçonne.
S'il vous plaît essayer cette
;
entre eux.Les noms de domaine sont en fait plus complexe. Par exemple, la plupart des domaines de premier niveau sont maintenant en utilisant Unicode noms de domaine, qui sont assez commune en Europe. Envisager l'adresse e-mail mailtest@пример.испытание, qui est en fait parfaitement valide
(bien qu'ils puissent toujours être transcrit à l'ancien formulaire - [email protected]--jxalpdlp). Cela signifie qu'il est probablement plus facile de définir ce que les personnages sont pas valide pour un nom de domaine. Voir ICANNs.
En outre, les Tld sont également pas à proprement parler partie de l'ensemble que vous avez défini, voir IANAs liste de validité Tld. Par exemple, [email protected] une adresse de courriel valide.
En bref, pour valider les adresses e-mail, envisager d'aller à un tiers de la bibliothèque, sauf si vous travaillez avec un nombre limité de cas particulier.
Maintenant, pour votre première question, je vous recommande un prétraitement de l'étape où vous diviser sur des délimiteurs (',' et ';'), garniture d'espaces (au moins s'il s'agit de la saisie de l'utilisateur) et de valider chaque entrée.
Dans un vieux regex livre, ils ont déclaré que vous ne pouvez pas écrire une expression régulière pour rechercher tous adresse de courrier électronique valide (bien que vous pouvez trouver à proximité).
Voici un site web traiter avec la regex et adresses e-mail.
Je vous recommande de diviser la corde à
;
et,
limites et vérifier chaque adresse e-mail séparément pour être valide/invalide avec votre regex.Ci-dessous est ma solution et cela a fonctionné comme prévu pour moi:
Quelque chose que j'ai écrit dans mes jours.
De base de l'email de validation est prise à partir de la mise en œuvre pratique de RFC 2822
correspond à des e-mails avec ; séparateur
Je vous en voulez plus séparateurs de swap (;)? avec [;,|]? etc à l'intérieur des crochets [].
Voici un Programme simple qui le fait pour vous, sans l'aide de l'Expression Régulière.Eh bien en Fait, il utilise une expression régulière, mais nous n'avons pas à vous soucier de la façon dont il regarde .php fait ça pour nous .
Vous devez séparer vos e-mails par un point virgule.
C'est une très vieille question, mais j'ai pensé que je vous ferais partager mon code C#.
J'ai décidé de l'analyser par le point-virgule, puis vérifier chaque email individuellement: