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

如何使用JavaScript实现邮箱校验并输出@与点号的位置索引

JavaScript 邮箱校验及字符位置获取实现

现有代码问题

当前代码存在3个会导致功能异常的核心问题:

  • if/else 未使用大括号包裹多行执行语句,存在语法错误,逻辑分支不会按预期执行
  • 正则规则不支持域名段带.的场景,无法匹配a.b@c.d这类多级域名格式
  • 未声明atpos/dotpos变量会污染全局作用域,document.write在页面加载完成后调用会覆盖整个页面内容

修正后可直接运行的完整代码

<html>
<body>
<div class="form"> 
<label for="email">Enter Email: </label> 
<input type="text" id="email"> 
<button onclick="validemail()" type="button">Submit</button>
<div id="result"></div>
</div>
<script>
function validemail() 
{
  const emailID = document.getElementById("email").value.trim();
  // 适配a.b@c.d、a@b.c、多级域名格式的校验正则
  const mailformat = /^[A-Za-z0-9.]+@[A-Za-z0-9]+(\.[A-Za-z0-9]+)*\.[A-Za-z]{2,4}$/;
  const atpos = emailID.indexOf("@");
  const dotpos = emailID.lastIndexOf(".");
  const resultDom = document.getElementById("result");

  if (mailformat.test(emailID)) {
    alert("Valid Email");
    resultDom.innerHTML = `
      <p>Email: ${emailID}</p>
      <p>atpos = ${atpos}</p>
      <p>dotpos = ${dotpos}</p>
    `;
  } else {
    alert("Invalid Email, Try Again");
    resultDom.innerHTML = "";
  }
}
</script>
</body>
</html>

效果验证

输入abc@gmail.com时,输出结果完全符合预期:

Email: abc@gmail.com
atpos = 3
dotpos = 9

输入a.b@c.d、a@b.c均可正常通过校验,同时正确返回对应位置索引。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 21:33:28