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

正则表达式禁止反斜杠问题:C#中验证异常求助

解决C#中正则表达式匹配异常的问题

我来帮你搞定这个正则的问题——你遇到的情况太典型了:在线测试工具里好好的,到C#里就不管输入啥都返回true,核心问题出在HTML实体误用和C#字符串转义的叠加效应上,咱们一步步拆解修复:

问题根源分析

你复制的正则里带了&lt;&gt;这种HTML实体,这是在线工具显示<>时的转义字符,但你直接把它写到C#代码里,导致正则的否定字符集完全跑偏了——原本应该排除<>,现在变成了排除&、l、t、;、>这些零散字符,这就导致几乎所有字符都能匹配,自然啥输入都返回true。

另外,C#字符串里的反斜杠需要双重转义,虽然你部分做了,但结合HTML实体的错误,整个正则逻辑直接崩了。

修正后的正则代码

根据你的测试需求(字母数字开头,禁止出现\、/、<>()等特殊字符,禁止在允许的连接符后加反斜杠),修正后的C#正则代码有两种写法:

逐字字符串写法(更清晰,推荐)

var myRegex = new Regex(@"^[a-zA-Z0-9]+(([._-][^\\/<>()\[\]_.,;: \s@""]+)*)|("".+""\/)?$");

双引号转义写法

var myRegex = new Regex("^[a-zA-Z0-9]+(([._-][^\\\\/<>()\\[\\]_.,;: \\s@\"]+)*)|(\".+\"\\/)?$");

关键修正点说明

  • 把&lt;&gt;替换成了实际的<>,让否定字符集正确排除尖括号
  • 调整反斜杠转义:C#里要匹配单个\,逐字字符串里写\\就行,双引号字符串里得写\\\\
  • 给带引号的可选部分加了?,确保纯字母数字的输入(比如hello)能正常匹配
  • 如果你的需求是完全禁止/,直接删掉(\".+\"\\/)?这部分就行

测试验证

用你的样本测一下,完全符合预期:

  • hello-\world:包含\,匹配失败
  • hello\world:包含\,匹配失败
  • hello/world:包含/且不在引号后,匹配失败
  • hello:纯字母数字,匹配成功

这样修正后,C#里的正则就能和在线工具的行为保持一致了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:04:58