正则表达式以排除特定字符串

时间:2013-02-12 22:21:04

标签: regex regex-negation regex-lookarounds

我目前正在实施一种身份管理解决方案,该解决方案将为用户提供管理其所有端点帐户的能力。

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

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

目前,我们已将此设置为DISVEROW以下正则表达式:

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

这非常有效。但是,我们想将此更改为允许数字或特殊,同时也禁用前一个。这是我尝试过的:

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

然而,我无法让它发挥作用。数字/特殊组工作正常,但字组不能。它确实看到字符串的END处是否使用了“密码”或某些变体,但不是在开头......

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

1 个答案:

答案 0 :(得分:0)

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

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

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