正则表达式确定一个字符串是否包含在另一个字符串中(n个字符)

时间:2016-03-04 11:15:20

标签: regex

我必须实施有关密码的规则。规则说新密码不得包含在旧密码中。规范说我们考虑包含至少4个连续字符。我正在寻找正则表达式,而不是java实现。

示例:

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:)

2 个答案:

答案 0 :(得分:1)

为了保证密码长度始终> 4 char,我们可以从旧传递中获取前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。之后你可以检查找到的布尔值:)

答案 1 :(得分:0)

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