7

私には次の2つの機能があります。

validateEmail: function(value) {
    var regex = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
return (regex.test(value)) ? true : false;
}

validateEmails: function(string) {

    var self = shareEmail;
    var result = string.replace(/\s/g, "").split(/,|;/);

        for(var i = 0;i < result.length;i++) {
            if(!self.validateEmail(result[i])) {
                return false;
            } else {               
            return true;
        }
    }
}

問題は、このような電子メールをテストするif(!self.validateEmails(multipleEmails)) {と、文字列の最初の電子メールのみに基づいてtrueまたはfalseが得られますが、文字列内のすべての電子メールをテストしたいということです。

ありがとうございました!

4

5 に答える 5

12

問題は if/else ブロックです。あなたは両方の条件で戻ってきます。これは、1 つの要素のみを評価した後に関数を終了することを意味します。

おそらくやりたいことを示すために、validateEmails を変更しました。

validateEmail: function(value) {
    var regex = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
    return (regex.test(value)) ? true : false;
}

validateEmails: function(string) {
    var self = shareEmail;
    var result = string.replace(/\s/g, "").split(/,|;/);

    for(var i = 0;i < result.length;i++) {
        if(!self.validateEmail(result[i])) {
            return false;
        }
    }

    return true;
}
于 2012-08-24T08:18:23.460 に答える
2

これはどう?

validateEmails: function(string) {

    var self = shareEmail;
    var result = string.replace(/\s/g, "").split(/,|;/);
    var errors = [];
    for(var i = 0;i < result.length;i++) {
        if(!self.validateEmail(result[i])) {
            errors[i] = result[i] + ' is not valid.';
        }
     }
     if (errors.length > 0) {
        alert(errors.join('\n'));
        return false;
     } else {
         return true;
     }

}
于 2012-08-24T08:30:29.543 に答える
2

jquery-validate を使用する場合、検証方法は次のようになります。

jQuery.validator.addMethod("separated_emails", function(value, element) {
    if (this.optional(element)) {
        return true;
    }

    var mails = value.split(/,|;/);
    for(var i = 0; i < mails.length; i++) {
        // taken from the jquery validation internals
        if (!/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(mails[i])) {
            return false;
        }
    }

    return true;
}, "Please specify a email address or a comma separated list of addresses");
于 2014-03-27T15:40:10.133 に答える
1

最も保守しやすい方法は、変数を使用して戻り値を格納することです。

validateEmail: function(value) {
    var regex = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
return (regex.test(value)) ? true : false;
}

validateEmails: function(string) {

var self = shareEmail;
var result = string.replace(/\s/g, "").split(/,|;/);
var allOk = true;


    for(var i = 0;i < result.length;i++) {
        if(!self.validateEmail(result[i])) {
            allOk = false;
        } 
    }

return allOk;
}
于 2012-08-24T08:20:40.987 に答える
0

以下のコードは、JQuery を使用してコンマまたはセミコロンで区切られた複数の電子メール アドレスを検証するのに最適です。

   var emailReg = new RegExp(/^([A-Z0-9.%+-]+@@[A-Z0-9.-]+.[A-Z]{2,6})*([,;][\s]*([A-Z0-9.%+-]+@@[A-Z0-9.-]+.[A-Z]{2,6}))*$/i);
      var emailText = $('#email').val();
      if (!emailReg.test(emailText)) {
          alert('Wrong Email Address\Addresses format! Please reEnter correct format');
            return false;
        }
于 2015-12-22T19:16:29.223 に答える