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

JS邮箱正则验证问题:需拦截以逗号/句号开头的无效邮箱

修正邮箱验证函数,禁止以句号/逗号开头的无效地址

你的问题核心在于原正则表达式允许以.开头的字符串通过验证,另外分割后的邮箱项还可能出现空值(比如连续输入多个分隔符),我来帮你把这两个问题一起解决:

修正后的完整代码

function validEmailAddress(emailAddress){ 
    // 修正正则:强制开头为字母/数字/下划线/连字符,后续可带合法的点分隔符(禁止连续点)
    var regex = /^[\w-]+(?:\.[\w-]+)*@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/; 
    var result = emailAddress.replace(/\s/g, "").split(/,|;/); 
    // 过滤掉分割后产生的空字符串(避免连续逗号/分号导致的无效项)
    result = result.filter(item => item.length > 0);
    
    for(var i = 0; i < result.length; i++) { 
        if(!regex.test(result[i])) { 
            return false; 
        } 
    } 
    return true; 
}

关键修正细节说明

  • 正则开头的严格限制:把原正则开头的([\w-\.]+)改成[\w-]+(?:\.[\w-]+)*,这样:
    • 强制邮箱本地部分(@之前的内容)必须以字母、数字、下划线或连字符开头,直接排除了以.开头的无效地址
    • 后续允许用.分隔合法字符,但禁止出现连续的句号(比如test..name@example.com会被判定为无效)
  • 空项过滤:添加result = result.filter(item => item.length > 0),处理用户输入类似,,test@example.com或; ; test@xxx.com这种包含空分隔项的情况,避免空字符串被误判
  • 另外原代码里的alert(result.length)我暂时保留了,如果是生产环境建议去掉,避免干扰用户操作

你可以测试这些场景:

  • 会被拦截的无效案例:.test@example.com、test.@example.com、,,invalid@xxx
  • 能通过的有效案例:test@example.com、test.name-123@example.co.uk、user@[192.168.1.1](IP格式域名也兼容)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:40:48