You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

实现邮箱格式校验:输入无效时提示并解决循环异常

问题修复方案

你的代码陷入死循环的核心原因是没有更新循环判断的变量,同时正则表达式也存在匹配范围错误,以下是具体修复步骤:

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 09:10:23