c# - 我的常规表达式在 C# 中不起作用
问题描述
我需要一个正则表达式来检查密码是否包含至少一个小写字母、至少一个大写字母、至少两个数字和至少一个(_*&$)。这是一个 MVC 项目。这就是我所拥有的
[RegularExpression(@"(?=\.\*\\d{2})(?=\./*[a-z])(?=\.\*[A-Z])(?=.*[_*&$])", ErrorMessage = "The password must contain at least 1 letter, 2 digits and a special symbol (_*&$)")]
解决方案
当前的正则表达式存在很多问题:
- 您转义了
.
and*
,现在它们表示文字.
和*
字符,而您想将它们用作特殊的正则表达式元字符 - 要匹配至少两个数字,您不能只使用
\d{2}
模式,因为它不匹配非连续数字,您需要\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 字母(?=[^_*&$]*[_*&$])
_*&$
-集合中至少一个特殊字符.*
- 整个字符串(没有换行符)(它被消耗)。
推荐阅读
- javascript - 在 React JS 中渲染图像的问题
- vba - 检查子表单中的记录集时引用无效
- python - Airflow Dag 不会因 python 脚本失败而失败
- arrays - 为什么在使用 ReadBytesExt 从字节片中读取整数时出现错误“特征界限不满足”?
- powershell - 如何更改 dir cmd 列出的文件的顺序
- android - 何时在 Android 中使用无头活动和服务?
- angular - HTML
带有脚本示例的标记无法在 TypeScript / Angular 应用程序中编译
- python-3.x - 如何使用 python 在 Windows 系统上编辑 docx 和/或 doc 文件标签?
- c++ - 从双向链表末尾删除节点时出现分段错误
- php - 按字段对对象数组进行排序没有区别