【问题标题】:Regex for password validation returning false for correct passwords用于密码验证的正则表达式为正确的密码返回 false
【发布时间】:2014-07-07 01:29:02
【问题描述】:

我试图编写一个正则表达式来验证密码,但它对有效密码返回 false。

密码必须至少包含以下 3 个:

  • 数字
  • 大写字母
  • 小写字母
  • 特殊字符

密码长度没有限制。

这是我的尝试:

@"^(?=(.*\d){3})(?=(.*[a-z]){3})(?=(.*[A-Z]){3})(?=(.*[^a-zA-Z\d]){3})$"

另外,我完全知道如何在不使用正则表达式的情况下做到这一点。但是,这是针对大学任务的,我们被告知必须使用它们。

【问题讨论】:

  • 那么密码“Ab1”有效吗?还是“至少 3 个”是指每组至少 3 个元素?
  • 对不起,我应该澄清一下。它必须包含三个或更多。
  • 所以密码 Th1sIsSt@çkOv3rF!0w 应该验证?
  • 如果 ç 字符匹配 [^a-zA-Z\d],那么是的。它必须具有我上面提到的属性的三个或更多实例。因此,至少应有 12 个字符。

标签: c# regex


【解决方案1】:

我认为你唯一的问题是你没有匹配任何字符。

@"^(?=(.*\d){3})(?=(.*[a-z]){3})(?=(.*[A-Z]){3})(?=(.*[^a-zA-Z\d]){3})$"

仅包含您的前瞻,以确保您的条件。这意味着基本上您需要具有前瞻性的条件,另一方面,真正的模式只有 ^$ 匹配空字符串。这个正则表达式永远不会返回 true。

只需在末尾添加.* 即可实际匹配字符。您的要求已包含在前瞻中。

@"^(?=(.*\d){3})(?=(.*[a-z]){3})(?=(.*[A-Z]){3})(?=(.*[^a-zA-Z\d]){3}).*$"

【讨论】:

  • 仅在某些情况下有效。尽管只有两个大写字母,gh6y78GH#^% 仍将对此进行验证,skfhsifcns,edche#£$444 也是如此
  • @StevePettifer,不,不会,缺少一个大写字母。
  • 你试过了吗?我提供的两种情况都将与您的正则表达式事件匹配,尽管它们不符合规定的要求。
  • @StevePettifer 这个答案是对的。我试过你说的会返回true,它返回false。
  • @StevePettifer,请参阅Regexr。您的示例不匹配,只需添加一个大写即可匹配
猜你喜欢
  • 2011-07-10
  • 1970-01-01
  • 2011-08-17
  • 2011-05-06
  • 2016-10-19
  • 2011-03-24
相关资源
最近更新 更多