【发布时间】:2012-08-06 02:55:57
【问题描述】:
我想创建一个preg_match 函数来验证我的密码,但我不知道如何编写它以允许使用以下特殊字符:!@#$%。
if(!preg_match(?????)$/', $password))
这是我想在正则表达式中使用的密码规则:
- 可能包含字母和数字
- 必须至少包含 1 个数字和 1 个字母
- 可能包含以下任何字符:
!@#$% - 必须是 8-12 个字符
感谢您提供的任何帮助。
【问题讨论】:
-
请考虑允许更长的密码,我更喜欢我的密码长度为 20 多个字符,允许这样做不会对您造成伤害。我不了解具有最大长度的网站 - 您将它们存储为散列,那么有什么问题?
-
@Dragon 我已将最大字符数增加到 50 个。这是一个简单的网站,我想我只是认为 8-12 个字符更容易让人们记住,并且不太可能需要重置密码。但是就像你说的那样,密码被加密了,这真的没什么大不了的。
-
我让 lastpass 替我记住我所有的密码 :-)
-
8-12 仍然足够短,可以很容易地蛮力。虽然它们对因果破解尝试效果很好,但 16 个字符的密码中有 90% 可以使用现代混合暴力破解技术在一小时内破解(如果您知道最大密码长度和字符范围,这将变得更加容易);因此,我建议上限为 32-64 个字符,并可能包含 2 因素身份验证,特别是如果这是为了保护任何类型的特别敏感数据(PPI、PCI、HIPPA 等)。
标签: php regex passwords preg-match