2013-02-12 109 views
3

我目前正在实施身份管理解决方案,该解决方案将为用户提供管理其所有端点帐户的能力。正则表达式排除特定字符串

目前,我们公司的密码策略符合默认的Windows要求:必须包含数字或特殊字符等。

不幸的是,在新系统的密码策略中,我们可能需要一个数字,一个特殊数字或两者,但不是“其中之一”。但是,新系统允许通过正则表达式进行验证。

目前,我们有这个设置为禁止以下的正则表达式:

.*[pP][aA4][sS$]{2}[wW][oO0][rR][dD].* 

这工作得很好。不过,我们希望将此更改为允许一位数字或一个特殊字符,同时还要DISALLOWING前一个。这里是我曾尝试过的:

((?=.*\d.*)|(?=.*[-'"!#$%&()*+,./:;<=>[email protected][\]\^_`{|}~\\].*))(?!.*[pP][aA4][sS$]{2}[wW][oO0][rR][dD].*) 

但是,我无法得到这个工作。数字/特殊组可以正常工作,但单词组不会。它确实看到在字符串的END处是否使用“密码”或一些变体,但不在开始处...

有什么建议吗?系统使用标准(Perl风格)正则表达式。

+0

我是否正确理解这一点,您必须使用数字或特殊字符,但不允许使用数字和特殊字符? – Eric 2013-02-12 22:48:58

+0

您必须使用数字或特殊字符,但如果您愿意,您可以同时使用这两种字符。正则表达式的那部分工作正常。我特别寻找关于排除“密码”位的答案。 – vermi 2013-02-12 22:52:39

+0

你可以依次测试2个不同的正则表达式吗?首先你要测试一般条款的允许性。第二个正则表达式会匹配禁止的模式 - 如果是,则拒绝。 – collapsar 2013-02-15 16:36:51

回答

0

通过一些技巧,可以结合你的正则表达式。

^([^pP\d!\-'"#$%&()*+,./:;<=>[email protected][\]\^_`{|}~\\]|[pP](?![aA4][sS$]{2}[wW][oO0][rR][dD]))*(\d|[-'"!#$%&()*+,./:;<=>[email protected][\]\^_`{|}~\\])([^pP\d!\-'"#$%&()*+,./:;<=>[email protected][\]\^_`{|}~\\]|[pP](?![aA4][sS$]{2}[wW][oO0][rR][dD]))*$ 

我已经成功地在Sublime文本编辑器中测试过了。

+0

谢谢mrhobo;我最终将这个任务交给了一个承包商,但我已经测试了你的解决方案,而且看起来工作正常。我将把这标记为可接受的解决方案。 :) – vermi 2013-06-03 23:34:59

+1

应该已经传递给我然后:) – 2013-06-04 06:54:36