【发布时间】:2014-07-31 19:19:26
【问题描述】:
问题:如何在不考虑所有可能情况的情况下编写此内容?如果有一天有人收到 4 个密码要求,那么输入很容易,但调试起来非常困难,因为会有 4 个!不同的中间工作方式。
我如何在代码中使用它:
[RegularExpression("^[A-Za-z0-9!@#$]*([A-Za-z][0-9][!@#$]|[0-9][!@#$][A-Za-z]|[!@#$][A-Za-z][0-9]|[!@#$][0-9][A-Za-z]|[0-9][A-Za-z][!@#$]|[A-Za-z][!@#$][0-9])[A-Za-z0-9!@#$]*$", ErrorMessage = "The Password value must contain at least one letter, one digit, and one special character.")]
为了观看方便,我把它弄坏了,所以不需要滚动:
[RegularExpression("^[A-Za-z0-9!@#$]*
([A-Za-z][0-9][!@#$]|[0-9][!@#$][A-Za-z]|
[!@#$][A-Za-z][0-9]|[!@#$][0-9][A-Za-z]|
[0-9][A-Za-z][!@#$]|[A-Za-z][!@#$][0-9])
[A-Za-z0-9!@#$]*$",
ErrorMessage = "The Password value must contain at least one letter,
one digit, and one special character.")]
如您所见,这是 3!中间的可能性 () 由 | 分隔(或)所以从这里你可以看到 4!可能性将很难维持。
问题要求:我希望这个 C# 中的正则表达式做的基本事情是要求(不分先后)至少一个字母,至少一个数字,至少一个特殊字符!,@ 、# 或 $
【问题讨论】:
-
试图提高正则表达式的可读性不是这里要走的路。将您的密码检查包装到有意义命名的类/方法中,这些类/方法会将您隐藏在代码的高级视图中。
-
Check out this page 并告诉您是否有帮助。问题中的正则表达式应该是您要查找的正则表达式。如果不是,请尝试澄清您的问题
-
顺便说一句,像这样的密码策略几乎是普遍愚蠢的:xkcd.com/936 我同意虽然你可以用正则表达式来做到这一点,但试图让正则表达式更具可读性并不是解决问题的方法去。把它当成一个有规则的策略,一个一个地验证规则。您可以告诉用户哪些愚蠢的策略规则没有被遵守。使用正则表达式更难做到这一点。
-
我目前正在通过 jQuery 通过客户端执行此操作,我可以在其中说“嘿,您的密码至少缺少一个 {字母|数字|特殊字符}。”现在我正在尝试使用模型验证来充分利用 MVC 框架,而不是过多地依赖 jQuery。我查看了您链接的漫画,但这是一个已实施的验证检查,我只是试图进入模型验证而不是带有警报消息的 jQuery。
标签: c# regex optimization redundancy