You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Kotlin实现手机号中间位替换为*:仅保留首尾两位

Kotlin实现手机号掩码:保留前后两位,中间替换为*

嘿,作为Kotlin新手遇到这个需求太正常啦,我给你分享几种实用的实现方式,从基础到进阶都有,你可以根据自己的场景选~

方法一:基础字符串操作(新手友好)

这种方式逻辑直白,一步一步拆解字符串,很容易看懂:

  1. 先清理手机号里的非数字字符(可选,如果你确定输入是纯数字可以跳过)
  2. 判断手机号长度,如果小于4直接返回原号码(避免索引越界)
  3. 截取前两位和后两位数字
  4. 生成对应数量的*(总长度减去4)
  5. 把三部分拼接起来

代码示例:

fun maskPhoneNumber(phone: String): String {
    // 过滤掉手机号里的非数字字符,比如空格、-等
    val cleanPhone = phone.filter { it.isDigit() }
    if (cleanPhone.length < 4) {
        return cleanPhone // 长度不够时直接返回原号码
    }
    val prefix = cleanPhone.substring(0, 2)
    val suffix = cleanPhone.substring(cleanPhone.length - 2)
    val mask = "*".repeat(cleanPhone.length - 4)
    return "$prefix$mask$suffix"
}

// 调用测试
fun main() {
    val originalPhone = "13812345678"
    println(maskPhoneNumber(originalPhone)) // 输出:13******78
}

方法二:正则表达式(更简洁)

如果想写得更紧凑,可以用Kotlin的正则替换功能,通过分组匹配前后两位,中间部分替换成对应数量的*

代码示例:

fun maskPhoneNumberRegex(phone: String): String {
    val cleanPhone = phone.filter { it.isDigit() }
    if (cleanPhone.length < 4) return cleanPhone
    return cleanPhone.replace(Regex("(\\d{2})(\\d+)(\\d{2})")) { matchResult ->
        "${matchResult.groupValues[1]}${"*".repeat(cleanPhone.length - 4)}${matchResult.groupValues[3]}"
    }
}

// 调用测试
fun main() {
    val originalPhone = "9876543210"
    println(maskPhoneNumberRegex(originalPhone)) // 输出:98******10
}

这里的正则(\\d{2})(\\d+)(\\d{2})会把手机号拆成三组:前两位、中间所有数字、后两位,再用分组值加掩码拼接成最终结果。

小提醒

  • 一定要处理长度不足4的情况,不然会抛出索引越界异常
  • 如果业务允许手机号带非数字符号,记得先做清理步骤,避免掩码出错

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

火山引擎 最新活动