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

ASP.NET中JS邮箱校验正则@被识别为C#代码报错如何解决

需求与问题描述
  • 待实现功能:给文本框绑定onchange事件,文本内容变更时自动校验输入是否为合法邮箱,校验通过则自动提交表单;同时需要优化邮箱校验正则,仅允许特定域名的邮箱通过。
  • 开发环境问题:在ASP.NET Razor视图中编写JS代码时,正则里的@符号会被框架识别为C# Razor语法标识导致报错,先后尝试加:、加;、反斜杠转义@的方案均无效。
  • 现有实现代码:
document.getElementById("txtCallerID").onchange = function () {
        var temp = document.getElementById("txtCallerID").value

        if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(temp))
          {
            this.document.submit();
          }
    }
  • 报错截图:
    • 原始代码报错:报错截图
    • 反斜杠转义@后报错:转义后报错截图
解决方案

1. 修复Razor环境下@符号解析报错

Razor在服务端渲染视图时,会优先解析所有@开头的内容作为C#服务端代码,JS层面的反斜杠转义、加特殊符号的方案都在客户端执行阶段生效,无法干预服务端的解析逻辑,全部无效。
两种可用修复方案:

  • 方案一:Razor原生转义,把JS代码里所有的@替换为@@,Razor渲染时会自动将@@输出为单个@到前端页面,不会触发语法报错。
  • 方案二:JS层绕开,用@的ASCII十六进制转义符\x40代替正则里的@,正则匹配效果完全一致,且代码中不出现@字符,从根源避免Razor误解析。

2. 实现指定域名邮箱校验

把正则里匹配通用域名后缀的部分,替换为需要放行的固定域名即可,例如仅允许example.com域名的邮箱通过,两种写法对应如下:

  • 双@转义写法:/^\w+([\.-]?\w+)*@@example\.com$/
  • \x40绕开写法:/^\w+([\.-]?\w+)*\x40example\.com$/

3. 修复原代码的提交bug

原代码中this.document.submit()写法错误,onchange事件回调里的this指向当前触发事件的文本框DOM元素,不存在document属性。可以直接通过表单ID获取表单元素后调用提交方法,也可以直接通过document.forms获取对应表单提交。

修正后完整代码示例

<script>
document.getElementById("txtCallerID").onchange = function () {
    // 直接通过this获取当前文本框输入值,无需重复查询DOM
    const inputVal = this.value.trim();
    // 示例:仅允许后缀为@your-domain.com的邮箱通过,按需替换实际域名即可
    const emailReg = /^\w+([\.-]?\w+)*@@your-domain\.com$/;
    if (emailReg.test(inputVal)) {
        // 替换为页面实际的表单ID
        document.getElementById("form1").submit();
    }
}
</script>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 15:21:26