我试图检查电子邮件的有效性(当用户开始键入onkeyup时),然后如果电子邮件有效,则将其推送到一系列唯一的电子邮件中;但是,一旦达到一定数量,我就停止推送到数组,对于我来说是3。

     <textarea (ngModelChange)="onKeyUp($event)"></textarea>

     onKeyUp(ev) {

      let finalEmailList = []
      this.finalEmailList = [];

      this.numberOfUsers = 3;

      let emails = ev.replace(' ', '').split(/,| /);

      emails.forEach(email => {
        if (this.validateEmail(email)) {
          //If the email has a valid format, the push it to the array
          finalEmailList.push(email);
          //it's a lodash function to clean the array an keep only unique emails in the array
          this.finalEmailList = _.uniq(finalEmailList);

           if (this.finalEmailList.length <= this.numberOfUsers) {
          this.numberOfUsers -= this.finalEmailList.length;
          }
        }
      })
    }

  //returns true if the email has a valid format
  validateEmail(email) {
    var re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
    return re.test(email);
  }

问题:

我认为这样做是错误的方法,因为在键盘上打印的每个字母都一次又一次地运行,重置变量,运行循环等。

同样,为 this.numberOfUsers 返回的值不正确。

最佳答案

如果您希望在验证之前完成电子邮件地址,则按照他人的建议验证onBlur可能是您的最佳选择。
另一个选择是继续监听onKeyUp,但仅在键是特定的触发键时才触发验证。

例子:

onKeyUp(event) {
  if ([13, 188].includes(event.keyCode)) {
    validateEmails()
  }
}

在此示例中,13和188分别是Enter和逗号的键代码。

关于javascript - Angular/Javascript-返回正确的数字onKeyUp,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50381107/

10-11 22:34