实现邮箱格式校验:输入无效时提示并解决循环异常
问题修复方案
你的代码陷入死循环的核心原因是没有更新循环判断的变量,同时正则表达式也存在匹配范围错误,以下是具体修复步骤:
1. 解决循环变量未更新的核心问题
你用const声明emailAddress,第一次赋值后就无法修改,循环内的prompt输入新内容后,并没有把新值赋值给这个变量,导致每次判断的都是最初输入的值,自然永远无法跳出循环。
需要把const改为let,并在循环内重新赋值新的输入内容。
2. 修正正则表达式的匹配错误
你写的[A-z]会包含ASCII码中Z(90)到a(97)之间的符号(比如[、\、]等),这会导致正则匹配不符合邮箱格式的预期,应该替换为[A-Za-z]来明确匹配大小写字母。
另外,用正则的test()方法直接返回布尔值,比match()返回数组的方式更简洁直观。
完整修复后的代码
// 邮箱验证函数 function validEmail(email) { const emailRegex = /[-\w.]+@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,4}/; return emailRegex.test(email); }; let emailAddress = prompt('Please enter your email'); while (!validEmail(emailAddress)) { // 将新输入的值重新赋值给emailAddress emailAddress = prompt('Please enter a valid email'); }
额外优化:处理用户取消输入的情况
可以增加判断,避免用户点击prompt的取消按钮后陷入循环:
let emailAddress; do { emailAddress = prompt('Please enter your email'); // 用户点击取消时直接退出循环 if (emailAddress === null) break; } while (!validEmail(emailAddress));
内容的提问来源于stack exchange,提问作者tyler308956
相关产品推荐
相关产品推荐

