【问题标题】:How can I pass a Regular Expression through a function?如何通过函数传递正则表达式?
【发布时间】:2021-12-17 16:39:33
【问题描述】:

我想验证一些将不同模式传递给验证函数的字段。

send.addEventListener("click", function (event) {
  let pattern = /^[A-Za-zÁ-Úá-ú\s]{3,15}$/;
  let nameIsVal = regexValidator(pattern);

  if (nameIsVal) {
    return true;
  } else {
    event.preventDefault();
    return false;
  }
});

function regexValidator(pattern) {
  if (!pattern.test(this.value)) {
    return false;
  } else {
    return true;
  }
}

【问题讨论】:

  • 在regexValidator,this.value 是undefined。调用另一个函数时,不会保留单击处理程序的上下文。您应该将 this.value 作为 regexValidator 的参数传递。

标签: javascript html dom


【解决方案1】:

我假设您正在上课。确保 this 关键字指向事件处理程序中的正确实例,使用 .bind() 关键字或箭头函数。

我会像这样注册处理程序:

send.addEventListener('click', (event) => this.checkRegex(event));

或者,如果您的环境不支持箭头功能,这也应该可以:

send.addEventListener('click', this.checkRegex.bind(this, event));

然后我会像这样将方法添加到类中:

checkRegex(event) {
    let pattern = /^[A-Za-zÁ-Úá-ú\s]{3,15}$/;
    let nameIsVal = this.regexValidator(pattern);

    if (nameIsVal) {
        return true;
    } else {
        event.preventDefault();
        return false;
    }
}

regexValidator(pattern) {
    if (!pattern.test(this.value)) {
        return false;
    } else {
        return true;
    }
}

【讨论】:

    猜你喜欢
    • 2021-02-02
    • 1970-01-01
    • 1970-01-01
    • 2021-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多