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

ASP.NET Core MVC中密码验证正则表达式失效问题

问题

我有一个正则表达式,原本用于匹配P@ssword1234这类符合规则的密码,之前在Angular中可以正常工作,但在ASP.NET Core MVC里无法匹配成功。

密码规则:

  • 长度≥10个字符
  • 至少包含1个数字
  • 至少包含1个大写字母
  • 至少包含1个小写字母
  • 至少包含1个特殊字符

ASP.NET Core MVC中的验证代码:

[DisplayName("Password")]
[Required(ErrorMessage = "Please enter your password.")]
[DataType(DataType.Password)]
[RegularExpression(@"^(?=.*[!@#$%^&*(),.?\"":{}|<>])(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d!@#$%^&*(),.?\"":{}|<>]{10,}$",
 ErrorMessage = "Password must contain at least 10 characters, including at least 1 uppercase letter, at least 1 lowercase letter, at least one number and a special character.")]
原因

问题出在C#逐字字符串(@前缀)的转义逻辑与JavaScript不同:在C#逐字字符串中,双引号需要用""转义,而不是\"。原正则里的\"会被解析为反斜杠+双引号两个独立字符,导致正则的特殊字符集合错误包含了反斜杠,同时没有正确识别双引号,进而引发匹配失败。

解决方案

将正则中的所有\"替换为"",修正后的代码如下:

[DisplayName("Password")]
[Required(ErrorMessage = "Please enter your password.")]
[DataType(DataType.Password)]
[RegularExpression(@"^(?=.*[!@#$%^&*(),.?"":{}|<>])(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d!@#$%^&*(),.?"":{}|<>]{10,}$",
 ErrorMessage = "Password must contain at least 10 characters, including at least 1 uppercase letter, at least 1 lowercase letter, at least one number and a special character.")]

修正后,正则引擎会正确识别特殊字符集合中的双引号,不会引入多余的反斜杠,此时P@ssword1234这类符合规则的密码就能正常通过验证。

内容的提问来源于stack exchange,提问作者A.Mac

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 22:22:38