You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Kotlin实现符合指定规则的优雅密码校验功能

Kotlin 密码校验优雅实现方案

这里提供两种实现方案,你可以根据自己的业务场景选择:

方案1:无正则高可读版本(推荐)

不需要写正则,规则逻辑一目了然,还支持返回具体的校验失败原因,方便业务侧直接使用:

// 定义校验结果密封类
sealed class PasswordValidationResult {
    object Valid : PasswordValidationResult()
    data class Invalid(val errorMsg: String) : PasswordValidationResult()
}

// 给String加扩展方法,直接调用即可
fun String.validatePassword(): PasswordValidationResult {
    return when {
        length < 8 -> PasswordValidationResult.Invalid("密码长度不能少于8个字符")
        !any { it.isLowerCase() } -> PasswordValidationResult.Invalid("密码需要包含至少1个小写字母")
        !any { it.isUpperCase() } -> PasswordValidationResult.Invalid("密码需要包含至少1个大写字母")
        !any { it.isDigit() } -> PasswordValidationResult.Invalid("密码需要包含至少1个数字")
        !any { !it.isLetterOrDigit() } -> PasswordValidationResult.Invalid("密码需要包含至少1个特殊字符")
        else -> PasswordValidationResult.Valid
    }
}

使用示例

fun main() {
    val testPassword1 = "Abc123!+"
    val testPassword2 = "abc12345"
    
    when(val res = testPassword1.validatePassword()) {
        PasswordValidationResult.Valid -> println("校验通过")
        is PasswordValidationResult.Invalid -> println("校验失败:${res.errorMsg}")
    }
    // 输出:校验通过

    when(val res = testPassword2.validatePassword()) {
        PasswordValidationResult.Valid -> println("校验通过")
        is PasswordValidationResult.Invalid -> println("校验失败:${res.errorMsg}")
    }
    // 输出:校验失败:密码需要包含至少1个大写字母
}

方案优势

  • 没有正则学习和维护成本,后续修改规则直接加判断分支即可
  • 直接返回具体错误原因,不需要额外做错误映射
  • 性能足够,密码字符长度普遍在20位以内,多次遍历的开销可以忽略不计

方案2:正则简洁版本

如果只需要判断是否合法,不需要错误原因,用正则实现代码更短:

fun String.isValidPassword(): Boolean {
    val passwordRegex = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[^A-Za-z0-9]).{8,}$".toRegex()
    return passwordRegex.matches(this)
}

使用示例

println("Abc123!+".isValidPassword()) // 输出 true
println("abc12345".isValidPassword()) // 输出 false

内容的提问来源于stack exchange,提问作者Popovych Taras

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 20:06:01