需要一个数字或非字母数字字符的密码正则表达式

7
我正在寻找一个非常具体的正则表达式,我几乎已经有了,但还不够完美。
我想要一个至少需要5个字符的正则表达式,其中至少有一个字符是数字值或非字母数字字符。
这是我目前拥有的:
^(?=.*[\d]|[!@#$%\^*()_\-+=\[{\]};:|\./])(?=.*[a-z]).{5,20}$

所以问题在于“或”这部分。它允许非字母数字值,但仍需要至少一个数字值。您可以看到我在要求数字和非字母数字之间使用了或运算符“|”,但似乎没有起作用。
任何建议都将是很棒的。

对于非字母数字字符,您可以使用\W(非单词字符,即不包括[a-zA-Z0-9_]之一)而不是[!@#$%^*()_-+=[{]};:|./]。 - Matthew Lock
5个回答

20

尝试:

^(?=.*(\d|\W)).{5,20}$

简短解释:

^                         # match the beginning of the input
(?=                       # start positive look ahead
  .*                      #   match any character except line breaks and repeat it zero or more times
  (                       #   start capture group 1
    \d                    #     match a digit: [0-9]
    |                     #     OR
    \W                    #     match a non-word character: [^\w]
  )                       #   end capture group 1
)                         # end positive look ahead
.{5,20}                   # match any character except line breaks and repeat it between 5 and 20 times
$                         # match the end of the input

抱歉,那不需要您拥有数字或非字母数字字符。 - Chris Nicol
是的,它确实可以。我猜你没有正确地测试它?向前查找需要字符串至少包含一个数字或非单词字符。 - Bart Kiers
2
如果你的意思是“一个数字和非字母数字字符”,那么这个正则表达式可以解决问题:^(?=.*\d)(?=.*\W).{5,20}$ - Bart Kiers

1

也许这对你有用:

^.*[\d\W]+.*$

使用类似以下代码来检查字符串大小:

if(str.len >= 5 && str.len =< 20 && regex.ismatch(str, "^.*[\d\W]+.*$")) { ... }

我需要将所有内容都放在一个正则表达式中,以解决我当前的问题。 - Chris Nicol

0

解决方案很简单,一旦S.Mark让我走上正确的轨道,只需要将我的数字和非字母数字部分合并为一个整体。

以下是最终的正则表达式,供有兴趣的人参考:

^(?=.*[\d!@#$%\^*()_\-+=\[{\]};:|\./])(?=.*[a-z]).{5,20}$

这将允许使用任何密码,长度在5到20个字符之间,并要求至少一个字母和一个数字和/或一个非字母数字字符。


0

这样行吗?

^.*?[\d!@#$%\^*()_\-+=\[{\]};:|\./].*$

对于长度为5和20的情况,请使用普通的strlen函数。

那并不实际可行,因为如果你想在开头或结尾使用非字母数字或数字字符,它将失败。然而,你确实让我找对了方向。 - Chris Nicol
你真的测试过吗?它应该适用于以非字母数字或数字字符开头或结尾的情况。 - YOU

0

有必要把所有东西都塞进一个巨大的正则表达式吗?只需使用程序逻辑(5≤length(s)≤20) ∧ (/[[:digit:]]/ ∨ /[^[:alpha:]]/)。我认为这样在语法和语义上更易读。


我在很多地方都使用ASP.NET成员资格,需要回去在多个地方实现该逻辑以及异常等。在成员资格配置中使用正则表达式更容易。正则表达式就像所有其他编程技术一样,有其应用场景。 - Chris Nicol

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接