密码验证正则表达式

时间:2011-02-21 16:59:55

标签: regex syntax

我正在尝试获取一个执行以下操作的正则表达式:

  1. 确保没有空白字符
  2. 最小长度为8
  3. 确保至少有:
    • 一个非字母字符
    • 一个大写字符
    • 一个小写字符
  4. 我找到了这个正则表达式:

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

    负责上面的第2点和第3点,但是如何将第一个要求添加到上面的正则表达式中呢?

    我知道我可以做两个表达式,然后

    \s
    

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

2 个答案:

答案 0 :(得分:17)

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

应该这样做。但请注意,您只是验证ASCII字母。 Ä不是符合您要求的信件吗?

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

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

答案 1 :(得分:7)

蒂姆的答案很有效,并且很好地提醒说,有很多方法可以用正则表达式来解决同样的问题,但是你自己找到了解决方案的正确方法。如果您已将(?!\ s)更改为(?!。* \ s)并将^和$锚点添加到结尾,则可以正常工作。

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