我试图检查电子邮件的有效性(当用户开始键入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/