Comment savoir si une chaîne aléatoire est une adresse e-mail ou quelque chose d'autre
Je ne pense pas que cette question a été posée avant... je n'arrive pas à trouver quelque chose à cette exigence.
Fond
Il y a une API qui retourne l'ID de personnes. En général, l'ID doit être considéré comme sensible à la casse... mais si l'ID est en fait leur adresse e-mail... et vous parlez à un de moins que stellaire de mise en œuvre de cette API qui renvoie un cas mixte version de leur adresse e-mail, il ya beaucoup de plaisir à avoir...
Si vous parlez à une mise en œuvre... il vous donne l'URL comme des choses que l'IDENTIFIANT, par exemple
http://foo.bar.com/blahblahblah
Vous pourrait être de parler à l'autre de la mise en œuvre... qui vous donne en retour une certaine non-évidente ID, par exemple
as€jlhdésdj678hjghas7t7qhjdhg£
Vous pourrait être de parler à une belle application qui vous donne en retour une belle minuscules adresse e-mail:
Ou vous pourriez être en parler à moins que stellaire de mise en œuvre qui renvoie exactement l'équivalent ID
RFC 2821 indique que seule la boîte aux lettres est sensible à la casse, mais que l'exploitation de la sensibilité à la casse va provoquer une série d'inter-op de questions...
Ce que je veux faire est d'identifier les chaînes qui sont des mails et de la force du domaine de minuscules. L'identification de l'URI comme des cordes est plus facile que le schéma est soit http
ou https
et j'ai juste besoin de minuscules le nom de domaine qui est beaucoup plus facile à analyser.
Question
Si une chaîne de caractères fournie par un service externe, est-il un test que je peux utiliser, qui permettra de déterminer si la chaîne est une adresse e-mail afin que je puisse vigueur le nom de domaine en minuscules?
Il est acceptable pour un petit % des adresses e-mail manquer et de ne pas obtenir le nom de domaine mis en minuscule. (Faux négatifs autorisé)
Il n'est pas acceptable pour forcer une partie d'une chaîne en minuscules, si elle n'est pas la partie domaine de l'adresse e-mail. (Les faux positifs ne sont pas permis)
mise à Jour
Noter que cette question est subtilement différent de cette et cette que dans le contexte de ces deux questions que vous savons déjà que la chaîne est censé être une adresse e-mail.
Dans le contexte de cette question, nous ne savons pas si la chaîne est une adresse e-mail ou quelque chose d'autre... ce qui rend cette question est-elle différente
- mis à part la vérification que le domaine existe et a un serveur de messagerie dans son entrée DNS, pourquoi vous ne pouvez utiliser une expression régulière pour vérifier la syntaxe-juridique adresses e-mail? beaucoup de ceux qui volent autour.
- double possible de Vérifier e-mail en Java
- Et puis il y a aussi Quel est le meilleur Java adresse email de validation de la méthode?
- Eh bien, je ne veux pas d'invoquer une requête DNS sur le chemin de code où ce code est évalué car ce serait introduire les questions... en particulier le serveur que ce code est en cours d'exécution peut ne pas être en mesure de valider le nom de domaine qui est dans le retour de l'ID. Donc la vérification des entrées DNS est
- le dns-vérification a été une étape supplémentaire, mais en dehors de regexp je ne vois vraiment aucun autre moyen de sortir de cette
- La spécification pour les adresses e-mail spécifiées par RFC2821 est fou. Mais à l'époque, les choses étaient différentes, - vous au document rfc821 dû tenir compte, et sont essentiellement constituées de, toutes sortes de propriétaires adresses e-mail. Sinon rallier les joueurs de la journée, aurait été impossible. Cela étant dit, les adresses de courriel sont vraiment trop souple. Le plus fou (mais valide) les attributs sont rarement utilisés. En savoir plus sur le cerveau-popping de la complexité de la tâche ici: en.wikipedia.org/wiki/Email
- le moyen d'en sortir c'est de code à RFC2821. Ou, l'OP peut décider qu'il n'reconnaître la validité d'un sous-ensemble de l'adresse email formats. Un bon sens de la définition serait probablement 99% de précision.
Vous devez vous connecter pour publier un commentaire.
- Essayer le code ci-dessous, cela peut être utile pour vous.
- Également prendre un coup d'oeil à ce site, qui présente un autre plus profond de validation à l'aide de
regular expression
. Plus profond de validation à l'aide de l'expression régulière"ping @ pong!"@[1.2.3.4]
est une adresse email valide qui votre code ne sera pas identifier correctement... maintenant, c'est aussi une adresse de courriel valide qui n'a pas besoin de mettre en minuscule du peu après la@
mais qui est un problème différent. En utilisant les regex pour identifier les adresses de courriel est un anti-modèleVous pouvez utiliser la suite de la vérification de l'e-mail;
@
symbole comme il se doit seulement être correspondant valablement construit des noms de domaine.Grâce à @Dukeling
devrait, à partir de ce que je peux dire, faire ce qui est requis.
Mise à jour
Depuis la précédente ignoré la possibilité d'
(comment)
syntaxe après la dernière@
... ce qui laisse le visage il, si nous les voyons faut juste renflouer rapide et le retour de la chaîne non modifiéendsWith("]")
)john."M@c"."Smith!"(coolguy)@(thefantastic)[1.2.3.4](onlythebest)
est également une adresse de courriel valide... mais c' pourrait probablement être ignoré en toute sécurité si, au lieu de puisage avecendsWith("[")
le vérifier est queindexOf(']') < lastAt
depuis qui indiquent une adresse de courriel qui n'est pas besoin mettre en minuscule comme[]
est uniquement pour les adresses IP[email protected]
ou toute fantaisie boîte aux lettres identifiants, par exemple"name with spaces"@example.com
est une adresse email valide (même si une sotte) et de ne pas passer votre regexMa suggestion est d'utiliser:
https://commons.apache.org/proper/commons-validator/apidocs/org/apache/commons/validator/routines/EmailValidator.html