密码验证正则表达式

Jos*_*ose 8 regex syntax

我试图得到一个执行以下操作的正则表达式:

  1. 确保没有空白字符
  2. 最小长度为8
  3. 确保至少有:
    • 一个非alpha字符
    • 一个大写字符
    • 一个小写字符

我找到了这个正则表达式:

((?=.*[^a-zA-Z])(?=.*[a-z])(?=.*[A-Z])(?!\s).{8,})
Run Code Online (Sandbox Code Playgroud)

它处理上面的第2点和第3点,但是如何将第一个要求添加到上面的正则表达式?

我知道我可以做两个表达式然后上面的那个

\s
Run Code Online (Sandbox Code Playgroud)

但是我想把它全部集中在一起,我尝试做类似的事情,?!\s但我无法让它发挥作用.有任何想法吗?

Tim*_*ker 17

^(?=.*[^a-zA-Z])(?=.*[a-z])(?=.*[A-Z])\S{8,}$
Run Code Online (Sandbox Code Playgroud)

应该做.但请注意,您只是验证ASCII字母.是Ä不是你要求的信?

\S 表示"除了空格之外的任何字符",因此通过使用此字符而不是点,并通过将正则表达式锚定在字符串的开头和结尾,我们确保该字符串不包含任何空格.

我还删除了整个表达式周围不必要的括号.


Evi*_*t7x 7

Tim的答案效果很好,并且很好地提醒我们有很多方法可以解决同一个问题,但是你正在寻找自己找到解决方案的正确方法.如果您已将(?!\ s)更改为(?!.*\s)并将^和$锚添加到结尾,则可以正常工作.

^((?=.*[^a-zA-Z])(?=.*[a-z])(?=.*[A-Z])(?!.*\s).{8,})$
Run Code Online (Sandbox Code Playgroud)