Une partie d'un site web que je travaille actuellement contient le processus d'enregistrement où les utilisateurs doivent fournir leur adresse électronique. Juste récemment, je suis devenu conscient que des domaines basés sur l'ASCII sont possibles (le courrier électronique). Mon backend est UTF-8 codé MySQL où je m'attends à ce que les utilisateurs (avec différents locaux) devraient pouvoir entrer leur email mais ne savez pas valider ce type d'adresse électronique. P>
Vous testez actuellement les outils JQuery et valide correctement l'adresse électronique anglaise, mais ne parvient pas à valider le courrier électronique non ASCII. De plus, j'ai besoin de faire la même chose au côté serveur avec PHP. Existe-t-il une expression régulière qui peut valider ce type d'adresse e-mail? P>
J'ai essayé cela, mais il échoue dans les outils de jQuery (ce n'est qu'un exemple de démo, je ne comprends pas cela aussi) p>
光 发光 光 发光 .com p>
aussi ce qui va se passer quand ils tapent leur adresse e-mail anglaise (Jonesmith@somemail.com) avec leur propre IME. Peut-on être validé avec une expression régulière actuelle que nous avons pour la validation de la messagerie anglaise. Actuellement, je n'ai pas à vous inquiéter si cet email existe pour pas. p>
merci p>
7 Réponses :
Un REG EXP pourrait être quelque chose comme ceci:
[^ ]+@[^ ]+\.[^ ]{2,6}
Il n'y a rien de limiter les TLD à 2-6 caractères et, étant donné la décision de l'ICANN de permettre la création d'arbitraires, il semble raisonnable de supposer que des adresses telles que .microsoft code> seront utilisées avant trop longtemps. De plus, il est possible que des espaces soient inclus dans les adresses électroniques valides s'ils sont correctement échappés.
Aucun problème, prolonger le {2,6} à ce que vous voulez. Il pourrait également remplacer par [^].
Merci pour l'info. La validation de ce genre semble être une tâche herculéenne pour moi.
Ce n'est pas une question triviale. Essayez de couvrir autant que vous pouvez avec votre REG EXP. Vérifiez ce lien pour voir ce que le véritable REG EXP ressemblerait à Perl: EX -parrot.com/~pdw/mail-rfc822-address.html
Tentative de valider les adresses électroniques peut ne pas être une bonne idée. Les spécifications ( RFC5321 , RFC5322 ) Permet de tellement de flexibilité qui les validant avec des expressions régulières est littéralement impossible em> et la validation d'une fonction est beaucoup de travail. Le résultat de ceci est que la plupart des systèmes de validation par courrier électronique finissent par rejeter un grand nombre d'adresses électroniques valides, de nombreuses inconvénients des utilisateurs. (De loin, l'exemple le plus courant de cela ne permet pas le caractère Il est plus probable que l'utilisateur soit (accidentellement ou délibérément) entrant une adresse électronique incorrecte que dans une adresse de messagerie non valide, la validation de manière non valide est une grande nécessité de très peu d'avantages, avec des coûts éventuels si vous le faites de manière incorrecte. p>
Je vous recommanderais de vérifier simplement la présence d'un caractère + code>.) P>
@ code> sur le client, puis envoyez un email de confirmation pour le vérifier; C'est le moyen le plus pratique de valider et cela confirme que l'adresse est aussi correcte. P>
Merci pour la suggestion. Je voulais savoir si des mailers comme Sendmail ou PHPMail peuvent gérer cette adresse électronique codée UTF-8 de la boîte sans modification de ma part.
Bien que techniquement correct que la validation d'un courrier électronique avec regex est presque i> impossible, je ne pouvais pas être plus en désaccord avec cette réponse en tant que solution générale. Dans la plupart des applications Real World B> (non théorique), vous stockiez l'adresse e-mail correspondante dans une base de données et / ou de faire une certaine manipulation à l'avenir. Autoriser toute vieille chaîne UTF-8 de passer sans encombrement de la couche de données est une idée terrible b>. Je préfère rejeter quelques adresses électroniques valides "hors du mur" que 100% de chances d'une attaque d'injection intelligente. Dans le monde réel, "hi" \ ~ e ^ ery! @Myhost code> ne viendra pas trop souvent.
Qu'en est-il de quelque chose que cela:
cette regex ne fait pas vraiment de validation (retournera de faux positifs et de faux négatifs)
\ w ne correspond pas. ou - (qui sont des caractères valides pour le domaine et le courrier électronique)
@Edsonmedina> Tous les courriels se terminent par .com
Depuis 5.2 PHP a un Construire dans la validation des adresses électroniques . Mais je ne sais pas si cela fonctionne pour les chaînes codées UFT-8: dans le code source PHP d'origine Vous trouverez le REG exp pour la validation du courrier électronique, ceci peut être utilisé pour la validation manuelle lorsque vous utilisez PHP <5.2. p> IDN_TO_ASCII () CODE>
peut être utilisé pour" convertir le nom de domaine en iDNA ASCII. " Qui peut ensuite être validée avec filtre_var ($ email, filtre_validate_email); code> p>
Merci. Je suppose que c'est une étape vers la bonne direction pour la validation du côté serveur.
Non, ça ne supporte pas UTF-8!
a eu cette idée de Page de tutoriel JavaScript . C'est fondamental, mais cela fonctionne pour moi sans vous soucier de la complexité des expressions ordinaires et des normes unicodes.
Validation du côté client strong> p> if(!isset($_POST['emailaddr']) || trim($_POST['emailaddr']) == "") {
//Error: Email required
}
else {
$atpos = strpos($_POST['emailaddr'],'@');
$stoppos = strpos($_POST['emailaddr'],'.');
if(($atpos === false) || ($stoppos === false)) {
//Error: invalid email
}
else {
if($stoppos < $atpos) {
//Error: invalid email
}
else {
if (($stoppos-$atpos) == 1) {
//Error: invalid email
}
}
}
sur ce sujet, j'ai aimé cette page tellement que j'ai configuré Un blog exposant des sites qui font la validation erroné < / a> (contributions reçues avec gratitude - ne laissez pas la vôtre à vous!). P>
En ce qui concerne les regenses Go, ceux qui disent "c'est faux", ont tendance à être légers sur des alternatives, et la validation tbh à la dernière lettre de la RFC n'est pas vraiment critique - par exemple alors que plugin de validation de jQuery utilise cette regex qui est intéressante construite, assez similaire dans le style (mais plus petit!) à l'ex-perroquet (en fait mon fournisseur de services Internet !) Lié par @powtac. P> noddy +! # $% & '* - / =? + _ {} |~test@gmail.com code> est une adresse parfaitement valide, il n'est pas trop déraisonnable de le rejeter étant donné qu'une proportion étonnamment importante d'utilisateurs ne peut même pas tapez correctement 'hotmail'. Certains domaines sont également assez restrictifs sur les noms d'utilisateur de toute façon, en particulier Hotmail. Donc, je suis en faveur des regexes qui sont manifestement raisonnables et ma source préférée pour cela est Cette page , bien que je n'aime pas leur "gagnant" actuel de JS 'et cela aiderait s'ils créent une page de test public. P>
comme offert par Mario , jouant un peu, je suis venu avec la regex suivante pour valider le courrier électronique non standard Adresse:
^([\p{L}\_\.\-\d]+)@([\p{L}\-\.\d]+)((\.(\p{L}){2,63})+)$
Il est valable pour PHP, pas pour JavaScript.
@ D.a.h JavaScript ne prend pas en charge les raccourcis unicode. Vous pouvez utiliser Steven Steven Steven Levithan's Package Xrexexp avec Unicode Add-Ons i> - xregexp.com/plugins a>.
Quelle belle adresse e-mail! :-) D'accord, j'ai mis à jour la regex. Les traits de soulignement sont effectivement autorisés par de nombreux fournisseurs de messagerie. Merci.
@Iliarostovtsebsv désolé, je n'ai pas vu votre commentaire jusqu'à présent. Upvoted. Merci!
Vous pouvez utiliser
\ p {l} code> pour correspondre à n'importe quel lettre Unicode a>.
@Mario utilisant votre exemple, vient de poster une réponse!