2016-03-04 144 views
0

我必须实现一个关于密码的规则。规则说新密码不能包含在旧密码中。规范说我们考虑至少包含4个连续字符。我正在寻找正则表达式,而不是Java实现。正则表达式来确定一个字符串是否包含在另一个字符中(n个字符)

例子:

OLD_PASSWORD = "Support1234" 
NEW_PASSWORD = "Support567" <-- not allowed 
NEW_PASSWORD = "Support" <-- not allowed 
NEW_PASSWORD = "Suppression" <-- not allowed 
NEW_PASSWORD = "Supersport" <-- not allowed 
NEW_PASSWORD = "123port" <-- not allowed 
NEW_PASSWORD = "1234" <-- not allowed 
NEW_PASSWORD = "123pork" <-- allowed 
NEW_PASSWORD = "pork123" <-- allowed 

这种正则表达式的是一个有点复杂,我想这样的事情:[^OLD_PASSWORD]{4}但它不是那么容易。

总结:我的字符串不应该包含一个确定字串的连续4个字符,以通过验证 请帮助THX :)

+0

切割与可能的块中的旧密码,然后使用的indexOf – 2016-03-04 11:24:13

+0

类似的东西可能工作'S'ú2 P 2 P 3 O·R·吨→5→6→7→' –

+0

@RC。我可以,但我不喜欢这种方法..此外,我使用弹簧和我pref使用类 –

回答

1

免得说,密码的长度总是> 4字符,我们可以采取先从旧通过4个字符,然后每隔4个字符比较它,直到oldpassword长度结束。

Boolean found = false; 
int l = 0, r = 4; 
while(found == false && r <= oldpass.length()){ 
    String tmp = oldpass.substring(l,r); 
    found = newpass.contains(tmp); 
    l++; r++; 
} 

请记住,子字符串从l到r-1。之后,您可以检查发现的布尔值:)

+0

作为我在之前的评论中说过,这个解决方案并不满足我,因为我在Spring中,并且我会使用一个简单的模式注释,这种方式对于进一步的修改更容易。这就是为什么我要求一个正则表达式:p –

+0

最后我解决了我的自己也在java中做了这个,有类似的处理,但它仍然不满足我,但你有点^^ –

0

将新密码转换为Pattern newPasswordPattern =“([1]?[2]?[3]?[p]?[o]?[r]?[t] ?)“; 查找旧的匹配项并检查其长度。

相关问题