使用 javascript 的电子邮件输入即时验证

Email input instant validation with javascript

我正在尝试使用 js 验证输入 type="email"

我找到了不同的方法来做到这一点,但没有一种对我有用。

HTML

<label for="email" class="form__label">User e-mail:</label>
<input type="email" name="email" id="email" onblur="checkEmail(this.value);" class="form__input" >

JS

  document.addEventListener('DOMContentLoaded', function() {

  var email = document.getElementById('email');

  function checkEmail(email) {
    var reg1 = /^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$/;

    if (reg1.test(email) == false) {
      email.style.border = "1px solid red";
    }else (reg1.test(email) == true) {
      email.style.border = "1px solid green";
    }
  };

});

我每次得到的是:

Uncaught ReferenceError: checkEmail is not defined at HTMLInputElement.onblur ...

我知道,我犯了一些简单的错误,但我为此苦苦挣扎了一段时间,无法继续前进...

您可能需要使用 @Andriy Klitsuk 引用的 HTML5 的电子邮件检查。因此,您可以完全省略额外的 checkEmail 调用。

但是遇到你的错误:

Uncaught ReferenceError: checkEmail is not defined at HTMLInputElement.onblur

您会收到上述错误,因为 checkEmail 函数存在于 EventHandler document.addEventListener('DOMContentLoaded', function(){ .... 中,因此在其外部不可用。

您可以从 EventListener 中取出该函数,因为无论如何它都不会在 EventHandler 内部调用:

  document.addEventListener('DOMContentLoaded', function() {

  var email = document.getElementById('email');
  });
  function checkEmail(email) {
    var reg1 = /^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$/;

    if (reg1.test(email) == false) {
      email.style.border = "1px solid red";
    } else if (reg1.test(email) == true) { // if was missing here
      email.style.border = "1px solid green";
    }
  };

我更愿意传递元素

<label for="email" class="form__label">User e-mail:</label>
<input type="email" name="email" id="email" onblur="checkEmail(this);" class="form__input" >

函数将得到如下值

function checkEmail(email) {
    var val = email.value;
    var reg1 = /^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$/;

    if (reg1.test(email) == false) {
      email.style.border = "1px solid red";
    }else if (reg1.test(email) == true) {
      email.style.border = "1px solid green";
    }
  };

还缺少一个 if

码笔参考 https://codepen.io/YasirKamdar/pen/eVRaYZ?editors=1111

您的代码中缺少 If 关键字,即

else (reg1.test(email) == true)

 

  var email = document.getElementById('email');

  function checkEmail(element) {
    var reg1 = /^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$/; 
    if (reg1.test(email.value) == false) {
    email.style.border ='1px solid red';
    }else if(reg1.test(email.value) == true){
      email.style.border = "1px solid green";
    }
  };
 
<label for="email" class="form__label">User e-mail:</label>
<input type="email" name="email" id="email" onblur="checkEmail(this);" class="form__input" >

您也缺少条件。只需使用它。

  function checkEmail(elm) {
    var reg1 = /^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$/;
console.log(reg1.test(elm.value))
    if (reg1.test(elm.value) == false){
      elm.style.border = "1px solid red";
    }else{
     elm.style.border = "1px solid green";
    }
  }

<label for="email" class="form__label">User e-mail:</label>
<input type="email" name="email" id="email" onblur="checkEmail(this);" class="form__input" >

首先,您的 else 语句中存在语法错误。应该是else if。现在解决方案;从 eventListener 中删除 checkEmail() 函数并使其独立,如下所示:

function checkEmail(email) {
    var email = document.getElementById('email');
    var reg1 = /^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$/;

    if (reg1.test(email) == false) {
      email.style.border = "1px solid red";
    }else if (reg1.test(email) == true) {
      email.style.border = "1px solid green";
    }
  }