【发布时间】:2011-12-30 13:59:27
【问题描述】:
我正在创建一些正则表达式代码,以便在客户尝试创建帐户时检查密码。目前我有两段代码在测试时似乎可以工作:-http://www.regexplanet.com/simple/index.html。
第一位是:
^.*(?=.{8,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$
这可以确保:
- 密码长度为 8 位
- 至少包含一个小写字母、一个大写字母、一个数字和一个特殊字符
第二部分是:
\S*(.)\1{3,}\S*
这可以确保:
匹配任何 4 个或更多连续的相同字符。
问题是,我怎样才能将它们结合起来?我试过无济于事,但它们似乎单独工作正常。
谢谢
【问题讨论】:
-
阅读:xkcd.com/936
-
首先,您应该注意,由于正则表达式错误,那些 (?=) 前瞻在 Internet Explorer 的 Javascript 中不起作用:blog.stevenlevithan.com/archives/regex-lookahead-bug 和 regexadvice.com/blogs/mash/archive/2009/02/21/…
-
有什么理由不单独检查它们吗?一般来说,我可能更愿意做几项简单的检查,而不是一项大规模的检查。这样,当您稍后回来查看它或其他开发人员来查看它时,它将很明显它在做什么。如果您因为使用两个正则表达式而不是一个而看到性能问题,我会感到非常惊讶......
-
@AricTenEyck 任何依赖 JavaScript 验证输入的人都应该吊销其编程许可证。这是标记为 c#,所以我敢打赌 OP 正在使用 C# 进行验证。
-
关于正则表达式的一些事情:它们非常强大,非常不可读,而且并非适用于所有用途。正则表达式处理程序也并非都是平等的。创建小型正则表达式并将它们链接在一起要好得多。当然,您想避免错误,因此创建一组测试(使用实时正则表达式评估器)。最后,把它们评论出来,因为下一个草皮(例如几年后的你)将花费更多的时间来理解它们,而不是你创造它们的成本。
标签: c# regex security passwords