【问题标题】:How can I achieve password regex?如何实现密码正则表达式?
【发布时间】:2013-11-11 09:10:50
【问题描述】:

我想在我的项目中使用正则表达式模式进行验证。

以下是正则表达式模式的描述:

  1. 长度必须至少为 8 个字符。

  2. 必须至少包含 1 个大写字符。

  3. 必须至少包含 1 个小写字符。

  4. 必须至少包含 1 个数字。

  5. 可能包含以下字符:

" $ ~ ' ` ! @ # % ^ & * ( ) - + { } [ ] = : , . ? / | \

  1. 不得使用重复字符。 (aa、11 等)

  2. 不得使用超过 3 个连续字符。 (abcd、wxyz、1234等)

【问题讨论】:

  • 我是否可以建议您的最后一个条件(f,g)实际上并没有使您的密码更强大 - 它们限制了可以选择的密码数量。另一方面,只有八的下限是可笑的。为什么要使用正则表达式?使用其他工具可以更好地解决这些“重复字符串”问题。这是“锻炼”还是“真正的工作”?在后一种情况下,告诉我们您想要使用什么工具,但您自己却没有提供任何尝试,这违背了 SO 问题的精神,这是为了展示努力。
  • 你会认为ABCd 违反规则(g)吗?

标签: c# asp.net regex c#-4.0 password-protection


【解决方案1】:

你可以试试这个正则表达式:

^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9]).{8,}$

PS:它满足所有条件,我没有包含section e.中提到的字符,因为你写了May contain,点将允许所有这些。

更新:根据已编辑的问题:使用此正则表达式满足条件(a) - (f)

^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?:(?!.*?(.)\1).){8,}$

我强烈建议不要使用正则表达式来满足条件 (g),因为这将是一个非常长的正则表达式。

【讨论】:

  • 明确需要条件 (e) 而不仅仅是 .{8}
  • 还有“至少8个:”{8,}
  • @Floris:请阅读我对有问题的(e) 的解释,感谢我在回答中使用{8,}
  • 这不行,至少需要8个字符才能满足最终条件。
  • @TimEbenezer:这不正确。从一开始就需要 8 个字符。所有条件都是超前的,它们不匹配。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-25
  • 2023-03-06
  • 2010-11-18
  • 2017-02-23
相关资源
最近更新 更多