我的正则表达式在 C# 中不起作用
Posted
技术标签:
【中文标题】我的正则表达式在 C# 中不起作用【英文标题】:My regular expresiion is not working in C# 【发布时间】:2021-03-18 00:17:24 【问题描述】:我需要一个正则表达式来检查密码是否包含至少一个小写字母、至少一个大写字母、至少两个数字和至少一个 (_*&$)。这是一个 MVC 项目。 这就是我所拥有的
[RegularExpression(@"(?=\.\*\\d2)(?=\./*[a-z])(?=\.\*[A-Z])(?=.*[_*&$])", ErrorMessage = "The password must contain at least 1 letter, 2 digits and a special symbol (_*&$)")]
【问题讨论】:
你这里可能有重复***.com/questions/23699919/… @Steve 此问题中至少还有一个问题未包含在上述线程中。 附注:请不要强迫用户使用特定符号。那些使用密码管理器的人会讨厌你。可能还有那些不喜欢的人。 regex101.com 是使用正则表达式的神器 【参考方案1】:当前的正则表达式存在很多问题:
您转义了.
和*
,现在它们表示文字.
和*
字符,而您想将它们用作特殊的正则表达式元字符
要匹配至少两个数字,您不能只使用\d2
模式,因为它不匹配非连续数字,您需要\d.*\d
或更高效的(?:\D*\d)2
您只使用了前瞻、非消耗模式,但 RegularExpressionAttribute 需要一个完整的字符串来匹配该模式。
因此,你需要
@"^(?=(?:\D*\d)2)(?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z])(?=[^_*&$]*[_*&$]).*"
详情
^
- 字符串开头
(?=(?:\D*\d)2)
- 两个不一定是连续的数字
(?=[^a-z]*[a-z])
- 至少一个小写 ASCII 字母
(?=[^A-Z]*[A-Z])
- 至少一个大写 ASCII 字母
(?=[^_*&$]*[_*&$])
- 至少一个来自_*&$
集合的特殊字符
.*
- 整个字符串(没有换行符)(被消耗)。
【讨论】:
此外,即使他们使用逐字标识符,OP 也会双重转义\\d
(我知道您已将其修复为新模式,但值得指出)。以上是关于我的正则表达式在 C# 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
包含正则表达式分隔符的简单且经过测试的在线正则表达式在 C# 代码中不起作用