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

ASP.NET MVC 5:为模型创建无连续5个重复字符的正则表达式

解决MVC正则特性中的转义序列错误

你碰到的「Unrecognized escape sequence」问题其实是C#字符串的特性导致的——在普通字符串里,单个\是转义符(比如用来表示\n换行、\t制表符),但正则表达式需要的是字面意义的反斜杠,所以必须做特殊处理。

这里有两种简单的解决办法:

方法1:转义所有反斜杠

把正则里的每个\都改成\\,让C#把它识别为字面反斜杠:

[RegularExpression("^(?=[\\D]*\\d)(?=[^a-zA-Z]*[a-zA-Z])(?=.{6,})(?!.*(\\d)\\1{4})(?!.*([a-zA-Z])(?:.*?\\4){4,}).*$")]

方法2:使用逐字字符串(更推荐)

在字符串前面加上@前缀,这样C#会把整个字符串当作逐字内容,不需要转义反斜杠,写法更清晰:

[RegularExpression(@"^(?=[\D]*\d)(?=[^a-zA-Z]*[a-zA-Z])(?=.{6,})(?!.*(\d)\1{4})(?!.*([a-zA-Z])(?:.*?\4){4,}).*$")]

额外说明:正则规则的调整

我注意到你的正则里额外加了「必须包含至少一个数字」和「必须包含至少一个字母」的验证逻辑,但你的需求里只提到了两个核心要求:

  1. 不能有超过5个连续重复的字符
  2. 长度至少6位

如果不需要数字和字母的强制要求,可以把正则简化成更简洁的版本:

[RegularExpression(@"^(?=.{6,})(?!.*(.)\1{4,}).*$")]

这个正则的逻辑很明确:

  • (?=.{6,}):保证字符串长度≥6
  • (?!.*(.)\1{4,}):禁止出现任何连续重复5次及以上的字符(支持所有字符类型)

如果确实需要保留数字和字母的验证,那用前面修正后的版本就没问题啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:51:51