为什么这个 javascript 验证总是失败

天使瓦西列夫

我有一个经典的电子邮件和密码输入验证,但由于某种原因,我的逻辑不起作用,我无法弄清楚它失败的部分。这是我从别人那里重构的代码,现在让我很烦恼

function Validation() {
  this.regex = {
    email: new RegExp(/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9]+\.[a-zA-Z0-9-]+/),
    password: new RegExp(/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{6,13}/),
  },
  this.email = function () {
    let valElement = document.getElementById("mail");
    console.log(valElement);
    let valueR = valElement.value.toString();
    console.log(valueR);
    let erorrEl = document.getElementById("error");

    let validate_mail = valueR.length == 0 && this.regex.email.test(valueR);
    console.log(validate_mail);
    console.log(this.regex.email);
    if(!validate_mail){
      valElement.className = "invalid";
      erorrEl.innerHTML = "Please enter a correct email";
      erorrEl.className = "error active"
      console.log("not validated email");
      event.preventDefault();
    }else{

      valElement.className = "valid";
      erorrEl.innerHTML = "";
      erorrEl.className = "error"
      console.log("validated email");
    }
  }
  this.password = function () {
    let valElement = document.getElementById("pass");
    let valueR = valElement.value;
    let erorrEl = document.getElementById("error2");
    let validate_pass = valueR.length == 0 && this.regex.password.test(valueR);
    if(!validate_pass){
      valElement.className = "invalid";
      erorrEl.innerHTML = "Please enter a correct password";
      erorrEl.className = "error active"
      console.log("not validated password");
      event.preventDefault();
    }else{
      valElement.className = "valid";
      erorrEl.innerHTML = "";
      erorrEl.className = "error"
      console.log("validated password");
    }
  }
  this.form = function(){
    if(this.password && this.email){

    }else{

    }
  }
}

var Valdator = new Validation();
        Valdator.email();
        Valdator.password();

通常我会在另一个文件中调用这些 Valdator 电子邮件和密码函数,它是来自 API 的请求,但这里的想法是相同的,我认为这不会有所作为

您的 RegEx 永远不会被执行,因为valueR.length == 0将评估为false,这会使&&在执行第二部分之前短路请记住,如果您对两个语句进行 AND 运算并且第一个语句的计算结果为false,则无需计算第二个语句,因为false && truefalse && false计算结果为false

话虽如此,将检查valueR.length == 0作为评估 RegEx 的先决条件是没有意义的valueR- 为什么我们要在长度为 0 的字符串上运行 RegEx?您应该将此逻辑翻转为!==.

并且请始终使用===!==将来,因为==类型转换会变得混乱。

let validate_pass = valueR.length !== 0 && this.regex.password.test(valueR);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章