Delphi: valider l'e-mail sans expressions régulières
Depuis Delphi n'a pas toutes les expressions régulières de la bibliothèque intégrée, avez-vous vu une bonne fonction pour valider les adresses e-mail, au moins à un certain degré à l'aide de Delphi RTL/VCL?
Je ne veux pas de lien supplémentaire *.dll à mon produit intégrant le support des expressions régulières et j'ai besoin aussi de Delphi 7 de compatibilité. L'incorporation de bibliothèque regex en exe augmente la taille et la j'en doute valeurs de l'ajout prochain de 100k parce que vous avez juste besoin de 10 à 50 lignes de la fonction de l'email de validation.
howtodothings.com/computers/...
Pour ce que ça vaut, la prochaine version de Delphi ont une bibliothèque regex construit dans la RTL, et il est prévu pour sortir dans quelques jours de plus...
La validation des adresses de courriel est l'un des bons exemples de cas où l'utilisation d'expressions régulières peut-être pas une bonne idée - stackoverflow.com/questions/36261/test-expand-my-email-regex/...
ce lien doit être une réponse, pas un commentaire
Delphi n'a pas fait "d'énormes liens" depuis l'époque où il était encore appelé Turbo Pascal, et même alors, il était très tôt. Delphi a "mise en relation intelligente," afin de ne pas lier le code qu'il sait que vous ne l'utilisez pas. Je vous suggère d'utiliser ce que les bibliothèques que vous voulez que de résoudre votre problème et ne pas vous blesser avec de lourdes licences, bien que le même conseil s'applique à la non-bibliothèque de code comme ce que Marko associés. (Pensez à utiliser le "@" devant les noms de personnes dans les commentaires afin de Débordement de Pile informer que vous avez répondu à eux. Ensuite, il ne veut pas prendre de 12 heures pour obtenir une réponse de leur part.)
Pour ce que ça vaut, la prochaine version de Delphi ont une bibliothèque regex construit dans la RTL, et il est prévu pour sortir dans quelques jours de plus...
La validation des adresses de courriel est l'un des bons exemples de cas où l'utilisation d'expressions régulières peut-être pas une bonne idée - stackoverflow.com/questions/36261/test-expand-my-email-regex/...
ce lien doit être une réponse, pas un commentaire
Delphi n'a pas fait "d'énormes liens" depuis l'époque où il était encore appelé Turbo Pascal, et même alors, il était très tôt. Delphi a "mise en relation intelligente," afin de ne pas lier le code qu'il sait que vous ne l'utilisez pas. Je vous suggère d'utiliser ce que les bibliothèques que vous voulez que de résoudre votre problème et ne pas vous blesser avec de lourdes licences, bien que le même conseil s'applique à la non-bibliothèque de code comme ce que Marko associés. (Pensez à utiliser le "@" devant les noms de personnes dans les commentaires afin de Débordement de Pile informer que vous avez répondu à eux. Ensuite, il ne veut pas prendre de 12 heures pour obtenir une réponse de leur part.)
OriginalL'auteur Vladislav Rastrusny | 2010-08-25
Vous devez vous connecter pour publier un commentaire.
Comme l'a demandé je suis en train de faire mon commentaire de réponse..
http://www.howtodothings.com/computers/a1169-validating-email-addresses-in-delphi.html
Merci!
Kennedy: tu veux dire CharInSet avertissement?
Non, je veux dire que le code met en œuvre la RFC 822. Le code a été publié en Mai 2001. RFC 2822 a été publié en avril 2001.
Kennedy: Ah, je vois, merci. Mais que serait probablement assez pour moi de toute façon. 2822 est plus stricte que je sais.
Été par le biais de ce récemment, recours à port Apache Commons validateurs, qui semble être largement acceptée comme "assez bon" - github.com/leus/delphi-emailvalidator
OriginalL'auteur Marko
Le gros problème sur l'adresse email de validation, c'est que RFC 822 est tellement large, qu'aucune expression régulière aidera.
L'article Je Savais Comment Valider Une Adresse e-Mail Jusqu'à ce que j'ai Lu Le RFC décrit ce bien.
Il cite le RFC
the local-part MUST be interpreted and assigned semantics only by the host specified in the domain part of the address
(lelocal part
est la partie avant de la@
signe dans une adresse e-mail).Afin de:
la seule façon de vérifier si une adresse email est valide, est l'installation d'une connexion SMTP à l'hôte d'accepter des messages pour ce domaine particulier, et le démarrage de l'e-mail de handshaking processus avec l'adresse email que vous essayez de vérifier.
C'est ce que beaucoup de logiciels anti-SPAM ne pour vérifier les adresses e-mail de l'expéditeur: ils communiquent avec le serveur SMTP de l'expéditeur de l'e-mail, essayez de configurer un SMTP poignée de main, et si cela se passe bien, ils ont le taux le courrier entrant est plus comme de ne pas être du SPAM.
Vous pouvez utiliser l'Indy SMTP composant client pour envoyer du courrier; la accepté de répondre à cette question explique comment.
--jeroen
RFC 822 avait été rendu obsolète par 2822 qui a supprimé certaines syntaxe autorisée par 822. De toute façon on a rarement besoin de la pleine 2822 de la syntaxe permettant une beaucoup plus simple regex
vous n'avez pas besoin de faire un e-mail SMTP poignée de main juste pour valider une adresse. Oui, vous devez vous connecter à l'e-mail de domaine du serveur SMTP, mais après cela, vous pouvez utiliser le SMTP
VRFY
commande pour demander au serveur si l'adresse est valide. Indy TIdSMTP composant a Vérifier() méthode pour cela.J'ai totalement oublié le VRFY, mais maintenant que tu en parles, je me souviens que pas tous les serveurs SMTP de soutien. Mais il a été un long temps depuis que je suis tombé sur une qui n'a pas de soutien. Donc merci pour la mention de VRFY.
OriginalL'auteur Jeroen Wiert Pluimers
Pour l'ancienne version de Delphi qui n'ont pas d'expression Régulière :
Pour celui qui aime utiliser RegExpression à l'aide de la Base de données du serveur de
OriginalL'auteur ffert2907