我的正则表达式在 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# 代码中不起作用

为啥我的正则表达式在 ASP.NET 中不起作用

应用逻辑后,正则表达式模式在 pyspark 中不起作用

正则表达式替换在 PHP 中不起作用

使用 pyinputplus 时,正则表达式似乎在 allowRegexes 参数中不起作用

在在线正则表达式测试器中工作的 MariaDB 正则表达式在 SELECT WHERE REGEXP 中不起作用