2011-06-30 1 views
8

J'ai une zone de texte où l'utilisateur doit insérer une adresse email valide.Vérifier email valide avant javascript restant en cours d'exécution

Lorsque l'utilisateur soumet une adresse e-mail valide un graphique de chargement apparaît alors que les données sont réaffecté.

Le code ci-dessous fonctionne très bien pour montrer le graphique de chargement, mais il ne vérifie pas que l'adresse e-mail est valide d'abord. Quelqu'un peut-il aider?

$('#btnEmail1Submit').live ("click", function() { 
    $('<div class="submitBg"></div>').appendTo(".emailEditContainer"); 
    $('<div class="submitLoadingCont"><img class="submitLoading" src="images/mypreferences/loading.gif" width="50" height="50" /></div>').appendTo(".emailEditContainer"); 
}); 

Je pense que je dois mettre une instruction if autour de la fonction qui est exécuté sur un clic - donc quelque chose comme:

$('#btnEmail1Submit').live ("click", function() { 
    if(emailvalid == true) { 
    $('<div class="submitBg"></div>').appendTo(".emailEditContainer"); 
    $('<div class="submitLoadingCont"><img class="submitLoading" src="images/mypreferences/loading.gif" width="50" height="50" /></div>').appendTo(".emailEditContainer"); 
    } 
}); 

J'utilise la validation email asp.net - il ressemble à quelque chose comme ceci:

<asp:RegularExpressionValidator Display="Dynamic" ValidationGroup="PrimarySubmit" ID="RegularExpressionValidator1" runat="server" ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" ControlToValidate="tbEmail1" ErrorMessage="Invalid email address - " /> 
+0

Veuillez arrêter d'écrire des étiquettes dans les titres. –

+3

Vous ne nous avez pas montré comment vous effectuez la validation des adresses e-mail. –

+1

Vous nous demandez d'écrire une vérification par courriel pour vous? – Flimzy

Répondre

7

Vous devriez vérifier la validité de l'email en utilisant une expression rationnelle

var re = /^(([^<>()[\]\\.,;:\[email protected]\"]+(\.[^<>()[\]\\.,;:\[email protected]\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ 

$('#btnEmail1Submit').live ("click", function() { 
    if(!email.match(re)) { 
    alert('invalid email'); 
    return false; 
    } 
    $('<div class="submitBg"></div>').appendTo(".emailEditContainer"); 
    $('<div class="submitLoadingCont"><img class="submitLoading" src="images/mypreferences/loading.gif" width="50" height="50" /> </div>').appendTo(".emailEditContainer"); 
}); 

L'expression rationnelle provient de Validate email address in JavaScript?

+0

Merci ... Je pense que j'avais été dans la bonne direction avant de demander de l'aide - juste nécessaire pour obtenir la déclaration correcte. – Tom

+0

'if (! Email.match (re))' ne fonctionne pas, car s'il ne le trouve pas, il retournera null. Donc, il devrait être 'email.match (re)! == null' – Refilon

11

Vous aurez besoin d'utiliser une expression rationnelle pour tester l'adresse e-mail pour la validité:

function isValidEmailAddress(emailAddress) { 
    var pattern = new RegExp(/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i); 
    return pattern.test(emailAddress); 
}; 

qui venait de this question, donc voir que le fil pour plus d'informations.

Vous devez appeler cette fonction avec l'adresse e-mail fournie par l'utilisateur, donc je suppose que quelque chose comme:

var email = $("#emailInput").val(); 
if(isValidEmailAddress(email)) { 
    //Do stuff 
} 
3

La validation par courriel a été discutée many, many times sur SO, et elsewhere. En bref, il est difficile (impossible) de faire parfaitement et est un compromis entre maximiser la couverture des formats valides et minimiser les faux positifs. En fait, tout ce que je fais pour valider les adresses e-mail est une vérification de base. En pseudocode:

if (address.contains("@")) { 
    .. // then ok 
} 

Tout le reste est fondamentalement futile. Même si vous passez les âges construire une regex incroyablement complexe pour se conformer aux RFC822 pour obtenir plus adresses valides (il y a des adresses réelles qui ne sont pas conformes à la RFC) - comment savez-vous cette boîte de réception existe réellement?

+0

Je sais ce que vous dites Richard et totalement d'accord. Cette vérification est principalement juste pour essayer d'éliminer la possibilité que l'utilisateur pourrait avoir fait une faute de frappe. Ce n'est pas si critique. – Tom

+1

Pour ceux comme moi qui cherchent la méthode 'contains', ce n'est pas natif, vous devez le définir à la main, comme décrit ici: http://stackoverflow.com/a/1978419/1005455. –

0

vous pouvez vérifier si vous utilisez validateur RegularExpression cela peut être utilisé

function myClick() { 
    Page_ClientValidate(); 
    if (Page_IsValid) { 
     return true; 
    } 
    else { 
     return false; 
    } 
} 

....

0

Si vous devez exécuter le validateur aps pour valider l'adresse e-mail, qui semble être pertinant à votre question, vous devez appeler le javascript généré qui fait cela avant de faire l'appel - alors appelez:

si (Page_ClientValidate)

faire vos autres choses

Cependant, cela se déroulera toute la validation de la page, pas seulement l'e-mail.

Si vous ne devez exécuter qu'un seul appel de validation pour cela, vous pouvez regarder le javascript generted sur votre page, et trouver où il appelle pour la validation de votre email, et l'appeler. Cependant, je ne recommanderais pas cela, car il peut changer lorsque la page est régénérée.

Voir CodeProject