首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >密码等级评定标准

密码等级评定标准
EN

Stack Overflow用户
提问于 2016-06-01 08:57:47
回答 2查看 130关注 0票数 3

我正在编写一个正则表达式,对使用的密码的质量进行分级。其思想是,如果密码只包含1个大写字符或至少6个大写字符,则被认为是普通密码。密码本身应该至少有8个字符长。

期望的行为:

Aaaaaaaa ->匹配

AAAAAAaa ->匹配

AAaaaaaa -> no match

我试过这样的方法:

(?=.*[A-Z]{1,1}|(?=.*[A-Z]{6,})).{8,}

这不起作用,因为它在AAaaaaaa上也是匹配的。问题是第一个正面的前瞻性,它允许2-5大写字符,但我不知道如何避免这一点。

EN

回答 2

Stack Overflow用户

发布于 2016-06-01 09:29:04

您的.*[A-Z]也会消耗向上的部分。在上面的字母之间使用排斥

代码语言:javascript
复制
^(?=.{8})(?:([^A-Z]*[A-Z]){6}.*|(?1)[^A-Z]*$)

它检查是否至少有6个或正好有1个上层被非上层包围。

  • (?=.{8})开始时的查找检查至少有8个字符
  • (?1)是对([^A-Z]*[A-Z])的引用

更多解释和regex101演示

票数 1
EN

Stack Overflow用户

发布于 2016-06-01 09:09:23

好的。我认为这并不是强密码的合适标准,但无论如何,让我们对这个问题进行比较:用字符串计算大写字母。

我认为使用regexp是不容易做到的。需要是一个吗?那么你应该从问题中删除php标签.

PHP解决方案:我只需过滤大写字母,然后对它们进行计数。

代码语言:javascript
复制
$caps = strlen(preg_replace('/[^A-Z]+/', '', $pass)); // number of uppercase chars in `$pass`

$mediocre = strlen($pass) != 8 || $caps > 5 || $caps < 2;
// mediocre if $pass is not exactly 8 chars long and does not contain between 2 and 5 uppercase characters
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37563968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档