MST
星途 面试题库

面试题:Kotlin正则表达式之复杂模式匹配

假设我们有一个字符串列表,其中每个字符串的格式为 "user_12345:password123!@#",代表用户名和密码组合。使用Kotlin正则表达式验证用户名是否只包含字母和数字,并且长度在5到10之间,密码包含至少一个大写字母、一个小写字母、一个数字和一个特殊字符(!@#$%^&*),编写相应的Kotlin代码进行验证。
40.0万 热度难度
编程语言Kotlin

知识考点

AI 面试

面试题答案

一键面试
import java.util.regex.Pattern

fun main() {
    val userPasswordList = listOf("user_12345:password123!@#", "user123:Pass123$", "invalid_user:pass123")
    for (userPassword in userPasswordList) {
        val parts = userPassword.split(':')
        if (parts.size == 2) {
            val username = parts[0]
            val password = parts[1]
            val isValidUsername = Pattern.matches("^[a-zA-Z0-9]{5,10}$", username)
            val isValidPassword = Pattern.matches("^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[!@#$%^&*]).{8,}$", password)
            if (isValidUsername && isValidPassword) {
                println("$username:$password 是有效的")
            } else {
                println("$username:$password 是无效的")
            }
        } else {
            println("$userPassword 格式不正确")
        }
    }
}

解释:

  1. 使用Pattern.matches方法来匹配正则表达式。
  2. 用户名的正则表达式^[a-zA-Z0-9]{5,10}$表示以字母或数字开头和结尾,长度在5到10之间。
  3. 密码的正则表达式^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[!@#$%^&*]).{8,}$表示至少包含一个小写字母、一个大写字母、一个数字和一个特殊字符,且长度至少为8。