2009-10-13 168 views
107

什么是正则表达式,以确保给定的字符串至少包含以下每个类别中的一个字符。正则表达式确保字符串至少包含一个小写字母,大写字母,数字和符号

  • 小写字符
  • 大写字符
  • 位数
  • 符号

我知道各组分别[a-z][A-Z]\d_|[^\w]模式(我让他们正确的,没”我呢?)。

但是,如何将它们结合起来,以确保字符串包含所有这些以任何顺序?

+0

什么平台/正则表达式? Bart的回答是对的,但是前瞻断言在JavaScript中不可靠,例如。 – bobince 2009-10-13 12:31:18

+0

无处不在 - 我正在学习正则表达式。有没有可以在JavaScript中使用的替代方法? – Amarghosh 2009-10-14 08:22:44

+0

@bobince嘿,我想知道为什么前瞻断言在Javascript中不可靠。有没有关于这方面的写作? – 2013-10-07 21:18:35

回答

250

如果你需要一个单一的正则表达式,请尝试:

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*(_|[^\w])).+$ 

的简短解释:

^     // the start of the string 
(?=.*[a-z])  // use positive look ahead to see if at least one lower case letter exists 
(?=.*[A-Z])  // use positive look ahead to see if at least one upper case letter exists 
(?=.*\d)   // use positive look ahead to see if at least one digit exists 
(?=.*[_\W])  // use positive look ahead to see if at least one underscore or non-word character exists 
.+     // gobble up the entire string 
$     // the end of the string 

和我一起SilentGhost同意,[_\W]可能会有点广阔。我会用这样的字符集替换它:[[email protected]#$%^&*.,?](随意添加更多当然!)

+5

再次感谢Bart。我没有意识到积极的展望。 – Amarghosh 2009-10-14 04:30:47

+0

如果我将最后一个'。+'改成'。*',会发生什么?我无法想出一个以'。*'失败的测试用例。它们在这方面是否一样? “零个或多个角色”似乎很好 - 只是寻求确认。 – Amarghosh 2009-10-14 09:49:09

+0

@Amarghosh:在这种情况下,没有区别。由于积极的预见,字符串已经包含至少4个字符。所以把'。+'改成'。*'甚至是'。{4,}'都没有什么区别。 – 2009-10-14 10:03:16

4

您可以分别匹配这三个组,并确保它们都存在。另外,​​似乎有点太宽泛,但如果这是你想要的,你可能想用\W替换它。

+0

谢谢。我不知道\ W。只是看它,发现它匹配Not Word。 \ W和[\ W]之间是否有区别? [\ W]是多余的吗? – Amarghosh 2009-10-14 04:29:13

+0

@Amarghosh,是的,'\ W'和'[\ W]'结果相同。 – 2009-10-14 05:31:09

2

巴特基尔斯,你的正则表达式有几个问题。最好的办法是这样的:

(.*[a-z].*)  // For lower cases 
(.*[A-Z].*)  // For upper cases 
(.*\d.*)   // For digits 

这样你就可以搜索,无论是在开始,结束还是在中间。在你有我有很多麻烦复杂的密码。

相关问题