2014-04-28 4 views
0

J'utilise js/jquery pour vérifier le format valide d'une chaîne pouvant contenir entre une et cinq adresses e-mail séparées par des virgules. Je n'ai qu'un cas qui passe qui ne devrait pas passer lorsque vous utilisez les méthodes suivantes:Expression régulière par courrier électronique caténaire

function isValidEmails(concatenatedEmails) 
    { 
     var compressedEmails = concatenatedEmails.replace(/ /g,''); 
     var emails = compressedEmails.split(','); 
     var isValid = true; 
     if(emails.length > 0 && emails.length <= 5) 
     { 
      $.each(emails, function(index, email) 
      { 
       if(!isValidEmailFormat(email)) 
       { 
        isValid = false; 
       } 
      }); 
     } 
     else 
     { 
      isValid = false; 
     } 
     return isValid; 
    } 

    function isValidEmailFormat(email) 
    { 
     return email.match("^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@" 
        + "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$"); 
    } 

Ces méthodes attrapent tout sauf une chaîne qui est passée dans ce genre:

"[email protected], [email protected], [email protected], asdf" 

Ce attrape tout sinon, mais en quelque sorte cette chaîne le ferait à travers la validation. Quelqu'un pourrait-il faire la lumière sur la façon dont je peux rendre cela plus efficace? Merci pour toute aide.

Répondre

1

Votre code fonctionnait bien pour moi. . . il a renvoyé false, lorsque la valeur "asdf" était là et true lorsque j'ai supprimé cette valeur de la liste. Avez-vous essayé de consigner des valeurs sur la console pour voir où les choses pourraient se casser pour vous? En ce qui concerne l'efficacité du code, la plupart du temps, votre code semble bon. En ce qui concerne l'efficacité du code, le code est bon. Il y a seulement deux ou trois choses que je pouvais voir que vous pourriez faire pour la réduire un peu:

  1. Dans la section du each() où vous vérifiez la validité de l'e-mail, si vous return la valeur, quand il est faux, il arrêtera de traiter le reste des emails (après tout, il ne sert à rien de continuer à les vérifier, après qu'un soit mauvais). Il est un petit changement:

    if(!isValidEmailFormat(email)) { 
        return (isValid = false); 
    } 
    

    qui arrêtera la boucle la première fois qu'il atteint une valeur email invalide et passer à la return pour l'ensemble de la fonction. Vous pouvez également rendre votre expression rationnelle un peu moins compliquée en utilisant la valeur réelle RegExp au lieu d'une chaîne) et en ajoutant l'indicateur i pour rendre le motif insensible à la casse.

    function isValidEmailFormat(email) { 
        return email.match(/^[a-z0-9+_-]+(\.[a-z0-9_-]+)*@[a-z0-9-]+(\.[a-z0-9]+)*(\.[a-z]{2,})$/i); 
    } 
    

    Cela vous permet de supprimer toutes les instances de A-Z et élimine la nécessité d'utiliser des barres obliques doubles (\\). En outre, + n'a pas besoin d'être échappé à l'intérieur d'un groupe de caractères, donc j'ai supprimé cela.

À part ces deux choses, votre code semble plutôt bien.

+0

J'apprécie votre contribution. Merci pour les exemples pour rendre le code plus efficace. – Bazinga

+0

Pas de problème. . . heureux d'aider. :) – talemyn

Questions connexes