jQuery inArray返回false

时间:2019-01-03 13:34:28

标签: javascript jquery arrays

通过这段代码,我想了解电子邮件地址是否包含数组中包含的域,但是该函数始终返回-1

var ele = jQuery('#email'); 
console.log( 'Email : ' + ele.val() ); 
var emailarr = ["gmail.com", "live.it", "email.it", "email.com", 
               "hotmail.it", "yahoo.it", "tiscali.it", "alice.it",
               "icloud.com", "outlook.com", "outlook.it", "inwind.it",
               "libero.it", "me.com", "mail.com", "virgilio.it", 
               "hotmail.com", "msn.com", "ymail.com","protonmail.com", 
               "fastwebnet.it" , "aruba.it"]; 
console.log( 'Index : ' + emailarr.indexOf(ele.val()) );
if (jQuery.inArray(ele.val(), emailarr) !== -1) { 
    ele.removeClass('error').addClass('normal'); 
} 
else { 
    jval2.errors = true; 
    ele.removeClass('normal').addClass('error'); 
}

enter image description here

3 个答案:

答案 0 :(得分:2)

您可以尝试使用此Link

HTML代码:

<input type="text" id="email" value="dasdas@gmail.com">

JS代码

var ele =jQuery('#email');


        console.log( 'Email : ' + ele.val().split('@')[1] );

        var emailarr = ["gmail.com", "live.it", "email.it", "email.com", "hotmail.it", "yahoo.it", "tiscali.it", "alice.it", "icloud.com", "outlook.com", "outlook.it", "inwind.it", "libero.it", "me.com", "mail.com", "virgilio.it", "hotmail.com", "msn.com", "ymail.com", "protonmail.com", "fastwebnet.it" , "aruba.it"];
console.log( 'Index : ' + emailarr.indexOf(ele.val().split('@')[1]) );
                            if(jQuery.inArray(ele.val().split('@')[1], emailarr) !== -1)
                            {
                                ele.removeClass('error').addClass('normal');
                            }
                            else
                            {
                                jval2.errors = true;
                                ele.removeClass('normal').addClass('error');
                            }

答案 1 :(得分:1)

之所以失败,是因为您要在不包含某些内容(电子邮件地址)的数组(您的数组仅包含域)中寻找内容。

因此,实际上,您似乎不是要检查完整的电子邮件,而是要检查域的一部分。

因此您可以这样做:

//better to rename emailarr to domains, since that's what it is
if (domains.filter(dmn => new RegExp('@'+dmn.replace(/(?=\.)/g, '\\')+'$').test(ele.val())).length) {
    //OK...
}

Fiddle

如果您发现RegExp体操有点难以理解,可以改做:

let email_domain = ele.val().split('@')[1];
if (domains.filter(dmn => dmn == email_domain).length) {
    //OK...
}

Fiddle

答案 2 :(得分:0)

您的代码正在检查整个电子邮件,而不仅仅是域。因此,添加以下检查应会修复该错误;

if (jQuery.inArray(ele.val().substring(ele.val().indexOf('@') + 1), emailarr) !== -1) { 
        ele.removeClass('error').addClass('normal'); 
} 
else { 
    jval2.errors = true; 
    ele.removeClass('normal').addClass('error'); 
}