我有一个问题,我需要防止用户提供的密码包含他的名字或部分名字。规则如下:
1.密码中不能包含任何用户的名字或姓氏
1.密码中的用户名或姓不能有大于或等于3个字符的部分。
到目前为止,我的代码只能验证规则1。
fun containsUsername(data: PasswordData): Boolean {
val partsUsername = data.username.split(" ").joinToString("|")
val namePattern = Regex("""(?i).*($partsUsername).*""")
return namePattern.containsMatchIn(data.password)
}
举例说明以便于理解:
fun main() {
val username = "Maria Antonia dos Santos"
val password1 = "AbcMariaXyz" // Invalid password due to "Maria"
val password2 = "AntoniaMaria" // Invalid password due to "Maria"
val password3 = "Maria123" // Invalid password due to "Maria"
val password4 = "AntoniaSenha" // Invalid password due to "Antonia"
val password5 = "Dos_123" // Invalid password due to "Dos"
val password6 = "SantosAbc" // Invalid password due to "Santos"
val password7 = "OniSenha" // Invalid password due to "Oni"
val password8 = "MarSenha" // Invalid password due to "Mar"
println(containsUsername(password1, username)) // true
println(containsUsername(password2, username)) // true
println(containsUsername(password3, username)) // true
println(containsUsername(password4, username)) // true
println(containsUsername(password5, username)) // true
println(containsUsername(password6, username)) // true
println(containsUsername(password7, username)) // true
println(containsUsername(password8, username)) // true
}
1条答案
按热度按时间xnifntxz1#
如果找不到合适的regex解决方案,您也许可以搜索密码字符串。这是在javascript(问题 * 被 * 标记),因为我知道kotlin甚至比我知道JavaScript更糟糕,但如果这个解决方案对你有用的话,希望转换它并不难。
这里有一个更详细的版本,它返回匹配的字符串部分,或者如果密码没有命中,则返回空字符串。我添加了一些调试原则,以便更容易看到它在做什么: