Я пытаюсь проверить достоверность электронной почты (когда пользователь начинает вводить 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 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 = /^(([^<>()\[\]\\.,;:\[email protected]"]+(\.[^<>()\[\]\\.,;:\[email protected]"]+)*)|(".+"))@((\[[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 неверно.