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

如何在Kotlin Multiplatform Mobile(KMM)中实现电子邮件地址校验?

KMM 跨平台电子邮件地址校验实现方案

原有依赖java.util.regex.Pattern的实现仅支持JVM平台,无法适配KMM多端场景,可使用以下两种适配方案:

方案一:通用正则实现(推荐普通业务场景使用)

直接使用Kotlin跨平台标准库自带的Regex类实现,无任何平台依赖,适配所有KMM支持的目标端:

/**
 * 校验字符串是否为合法邮箱地址
 */
fun String.isValidEmail(): Boolean {
    // 通用邮箱正则,覆盖99%以上日常使用场景
    val emailRegex = Regex("^[A-Za-z0-9+_.-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$")
    return emailRegex.matches(this.trim())
}
  • 实现逻辑简单,跨平台一致性高
  • 可根据业务需求自行调整正则规则

提示:不建议使用过于复杂的RFC全兼容正则,避免合法邮箱被误拦截,普通业务场景下通用正则即可满足需求

方案二:原生能力实现(推荐对校验准确性要求高的场景使用)

通过KMM的expect/actual机制调用各平台原生校验能力,准确性和兼容性更高:

commonMain 层声明公共接口

expect fun String.isValidEmail(): Boolean

androidMain 层实现

import android.util.Patterns

actual fun String.isValidEmail(): Boolean {
    return Patterns.EMAIL_ADDRESS.matcher(this.trim()).matches()
}

iosMain 层实现

import platform.Foundation.NSDataDetector
import platform.Foundation.NSMakeRange
import platform.Foundation.NSTextCheckingTypeLink

actual fun String.isValidEmail(): Boolean {
    val detector = NSDataDetector.dataDetectorWithTypes(NSTextCheckingTypeLink, error = null) ?: return false
    val input = this.trim()
    val matches = detector.matchesInString(
        string = input,
        options = 0,
        range = NSMakeRange(0, input.length)
    )
    return matches.size == 1 && matches.first()?.range?.length == input.length.toULong()
}
  • 复用各系统官方校验规则,无需自行维护正则
  • 对特殊格式邮箱的兼容性更好

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 23:42:01