特定域的Javascript电子邮件验证

特定域的Javascript电子邮件验证,javascript,Javascript,我无法找出缺少的内容,因此当电子邮件有效时,它将跳过最后一条无效消息,并移动到表单上的下一项进行验证: enter code here if (document.form1.email.value.length > 0) { var tst = document.form1.email.value; var okd = ['bankofamerica.com','baml.com','magner.com','ml.com','ust.com','ustrust

我无法找出缺少的内容,因此当电子邮件有效时,它将跳过最后一条无效消息,并移动到表单上的下一项进行验证:

enter code here 
    if (document.form1.email.value.length > 0) {

    var tst = document.form1.email.value;
    var okd = ['bankofamerica.com','baml.com','magner.com','ml.com','ust.com','ustrust.com']
    for (var i = 0; i < okd.length; i++) { okd[i] == okd[i].toLowerCase() }

    var emailRE = /^[a-zA-Z0-9._+-]+@([a-zA-Z0-9.-]+\.[a-zA-Z]{2,4})$/
    var aLst = emailRE.exec(tst)
    if (!aLst) {
        alert(tst + ' is not a valid e-mail')
    } else {
        var sLst = aLst[1].toLowerCase()
        for (var i = 0; i < okd.length; i++) {
            if (sLst == okd[i]) {
                //    alert(aLst[1] + ' is allowed');-->

           }
       }

            if (i == okd.length) alert(aLst[1] + ' is not allowed.  Please enter an email address with an authorized domain.')

            document.form1.email.select();
            return false;


    }   
}
在此处输入代码
如果(document.form1.email.value.length>0){
var tst=document.form1.email.value;
var okd=['bankofamerica.com'、'baml.com'、'magner.com'、'ml.com'、'ustrust.com'、'ustrust.com']
对于(var i=0;i
}
}
如果(i==okd.length)警报(aLst[1]+'是不允许的。请输入具有授权域的电子邮件地址。“)
document.form1.email.select();
返回false;
}   
}

我建议将此代码放入一个函数中,可能名为
ValidateEmail()

在您的循环中:如果您确定电子邮件有效,
返回true。这将阻止进一步执行。如果该域不匹配,让它继续循环以检查其他域

如果循环完成时没有返回
true
,您将知道它与任何内容都不匹配,因此
返回false在最后

编辑:改用try/catch:

if (document.form1.email.value.length > 0) {

    var tst = document.form1.email.value;
    var okd = ['bankofamerica.com','baml.com','magner.com','ml.com','ust.com','ustrust.com']
    for (var i = 0; i < okd.length; i++) { okd[i] == okd[i].toLowerCase() }

    try {
        var emailRE = /^[a-zA-Z0-9._+-]+@([a-zA-Z0-9.-]+\.[a-zA-Z]{2,4})$/
        var aLst = emailRE.exec(tst)

        if (!aLst)
            throw (tst + ' is not a valid e-mail');

        // isValidDomain will be changed to 'true' only if it matches an item in the array
        var isValidDomain = false;

        var sLst = aLst[1].toLowerCase()
        for (var i = 0; i < okd.length; i++) {
            if (sLst == okd[i]) {
                isValidDomain = true;
                // We break here because a match has been found - no need to compare against the other domain names.
                break;
            }
        }

        if(!isValidDomain)
            throw (aLst[1] + ' is not allowed.  Please enter an email address with an authorized domain.');

        // If execution reaches here, you know it passed both tests!
        return true;

    }
    catch(err) {

        // This code block runs whenever an error occurs

        alert(err);
        document.form1.email.select();
        return false;
    }
}
if(document.form1.email.value.length>0){
var tst=document.form1.email.value;
var okd=['bankofamerica.com'、'baml.com'、'magner.com'、'ml.com'、'ustrust.com'、'ustrust.com']
对于(var i=0;i
throw
基本上就像一个
goto
命令。它将直接跳转到代码的
catch(err)
部分

有关尝试、捕捉和投掷的更多信息:


    • 非常感谢科林

      我必须删除以下两行,以避免代码停止在下一个验证字段上运行:

                    isValidDomain = true;
                          // We break here because a match has been found - no need to compare against the other domain names. 
                          // break - exits code from running on down to next item on page
                      }
                  }
      
                  if (!isValidDomain)
                      throw (aLst[1] + ' is not allowed.  Please enter an email address with an authorized domain.');
      
                  // If execution reaches here, you know it passed both tests! 
               //   return true; - was not needed, stops code from running on page
      
              }
              catch (err) {
      

      另外,在第一个
      if
      语句中,可以
      返回false
      是不是该电子邮件肯定无效。这将阻止检查每个域。不工作,显然我不知道如何做。。。必须有一个GoTo命令或什么东西,让它跳到最后,如果已经是真的…为什么这么难?我不需要循环或中断,我只需要它进入下一步,跳过最后一步。我有一个更好/更清晰的解决方案给你。关于代码示例,请参阅我的修订答案。谢谢!部分是我的错-我认为这是将整个电子邮件与“@”前半段的域进行比较。。。?