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

如何在HTML和JavaScript中验证邮箱地址含@、.及@前后字符

搞定邮箱地址验证的实现方案

嘿,我来帮你把邮箱验证的逻辑补全!首先咱们明确你要的核心规则:

  • 邮箱里必须有@符号,而且它前后都得有实际内容,不能是空的
  • 必须包含.符号,而且这个.得在@的后面,同时.的前后也不能是空的(比如不能是user@.com或者user@com.这种情况)

我先把你没写完的代码补全,再把验证逻辑加进去,这样你就能直接用了:

<!DOCTYPE html>
<html>
<head>
    <title>邮箱验证示例</title>
    <script language="JavaScript">
        function showInput() {
            // 先把各个输入值取出来
            var email = document.getElementById("com").value;
            var firstName = document.getElementById("fname").value;
            var lastName = document.getElementById("lname").value; // 补全你没写完的姓氏ID

            // 开始做验证
            let isEmailValid = true;
            let errorMessages = [];

            // 第一步:检查有没有@符号
            if (!email.includes("@")) {
                isEmailValid = false;
                errorMessages.push("邮箱里必须包含@符号哦");
            } else {
                // 把邮箱按@拆成两部分
                const [beforeAt, afterAt] = email.split("@");
                
                // 检查@前面有没有内容
                if (beforeAt.trim() === "") {
                    isEmailValid = false;
                    errorMessages.push("@符号前面不能是空的");
                }
                // 检查@后面有没有内容
                if (afterAt.trim() === "") {
                    isEmailValid = false;
                    errorMessages.push("@符号后面不能是空的");
                } else {
                    // 检查@后面有没有.符号
                    if (!afterAt.includes(".")) {
                        isEmailValid = false;
                        errorMessages.push("@符号后面必须包含.符号");
                    } else {
                        // 把@后面的部分按.拆开,确保前后都有内容
                        const [beforeDot, afterDot] = afterAt.split(".");
                        if (beforeDot.trim() === "" || afterDot.trim() === "") {
                            isEmailValid = false;
                            errorMessages.push(".符号的前后都不能是空的哦");
                        }
                    }
                }
            }

            // 根据验证结果处理
            if (isEmailValid) {
                // 验证通过,这里可以换成你原本要执行的逻辑
                alert(`输入有效!\n姓名:${firstName} ${lastName}\n邮箱:${email}`);
            } else {
                // 验证失败,把错误信息列出来
                alert("邮箱格式不对哦:\n" + errorMessages.join("\n"));
            }
        }
    </script>
</head>
<body>
    <!-- 配套的表单元素,你可以根据自己的需求调整 -->
    <label>名字:</label><input type="text" id="fname"><br>
    <label>姓氏:</label><input type="text" id="lname"><br>
    <label>邮箱:</label><input type="text" id="com"><br>
    <button onclick="showInput()">提交</button>
</body>
</html>

为啥这么写?

  • 分步验证的好处是能给用户具体的错误提示,比如用户忘了写@,就直接告诉他“缺少@符号”,而不是模糊的“格式错误”
  • 用trim()是为了排除用户不小心输入的空格,比如user@example.com这种带空格的情况

如果你想要更简洁的写法,也可以用正则表达式,一行搞定验证:

// 这个正则能覆盖你要的所有规则
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
if (!emailRegex.test(email)) {
    isEmailValid = false;
    errorMessages.push("请输入有效的邮箱地址");
}

这个正则的意思是:

  • ^[^\s@]+:开头不能有空格或@,至少有一个字符
  • @:必须有@符号
  • [^\s@]+:@后面到.之前不能有空格或@,至少一个字符
  • \.[^\s@]+$:必须有.,而且.后面不能有空格或@,至少一个字符,直到结尾

你可以根据自己的需求选:分步验证适合要给用户明确提示的场景,正则验证适合追求代码简洁的场景。

内容的提问来源于stack exchange,提问作者ben

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:51:00