正则表达式禁止反斜杠问题:C#中验证异常求助
解决C#中正则表达式匹配异常的问题
我来帮你搞定这个正则的问题——你遇到的情况太典型了:在线测试工具里好好的,到C#里就不管输入啥都返回true,核心问题出在HTML实体误用和C#字符串转义的叠加效应上,咱们一步步拆解修复:
问题根源分析
你复制的正则里带了<>这种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@\"]+)*)|(\".+\"\\/)?$");
关键修正点说明
- 把
<>替换成了实际的<>,让否定字符集正确排除尖括号 - 调整反斜杠转义:C#里要匹配单个
\,逐字字符串里写\\就行,双引号字符串里得写\\\\ - 给带引号的可选部分加了
?,确保纯字母数字的输入(比如hello)能正常匹配 - 如果你的需求是完全禁止
/,直接删掉(\".+\"\\/)?这部分就行
测试验证
用你的样本测一下,完全符合预期:
hello-\world:包含\,匹配失败hello\world:包含\,匹配失败hello/world:包含/且不在引号后,匹配失败hello:纯字母数字,匹配成功
这样修正后,C#里的正则就能和在线工具的行为保持一致了。
内容的提问来源于stack exchange,提问作者jbtamares
相关产品推荐
相关产品推荐

