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

11位身份证号输入掩码的查找替换正则表达式实现咨询

11位身份证号实时输入掩码正则实现方案

需求说明

实现11位身份证号输入过程中实时格式化为\d\d\d.\d\d\d.\d\d\d-\d\d格式,输入过程中无多余分隔符,满11位后自动停止格式化。

实现方案

方案1:三次正则替换(无回调,逻辑简单)

核心逻辑为仅当当前段后还有输入内容时,才插入对应分隔符,避免提前出现多余符号:

  • 第一步插入第一个.:
    查找规则:(\d{3})(?=\d)
    替换规则:$1.
  • 第二步插入第二个.:
    查找规则:(\d{3}\.\d{3})(?=\d)
    替换规则:$1.
  • 第三步插入-:
    查找规则:(\d{3}\.\d{3}\.\d{3})(?=\d)
    替换规则:$1-

Kotlin代码示例

fun transformation(input: String): String {
    // 先过滤非数字字符,限制最大输入11位
    val pureDigits = input.replace(Regex("\\D"), "").take(11)
    return pureDigits
        .replace(Regex("(\\d{3})(?=\\d)"), "$1.")
        .replace(Regex("(\\d{3}\\.\\d{3})(?=\\d)"), "$1.")
        .replace(Regex("(\\d{3}\\.\\d{3}\\.\\d{3})(?=\\d)"), "$1-")
}

fun main() {
    // 测试不同输入长度
    listOf("1", "123", "1234", "123456", "1234567", "123456789", "1234567890", "12345678901")
        .forEach { println("输入$it → 输出${transformation(it)}") }
}

测试效果

输入输出
123123
1234123.4
123456123.456
1234567123.456.7
123456789123.456.789
1234567890123.456.789-0
12345678901123.456.789-01

方案2:单正则匹配+替换回调

如果希望仅做一次正则匹配,可使用带匹配结果回调的替换方式:
查找规则:^(\d{1,3})(\d{1,3})?(\d{1,3})?(\d{1,2})?$

Kotlin代码示例

fun transformation(input: String): String {
    val pureDigits = input.replace(Regex("\\D"), "").take(11)
    val regex = Regex("^(\\d{1,3})(\\d{1,3})?(\\d{1,3})?(\\d{1,2})?$")
    return regex.replace(pureDigits) {
        val p1 = it.groupValues[1]
        val p2 = it.groupValues[2].takeIf { s -> s.isNotEmpty() }?.let { s -> ".$s" } ?: ""
        val p3 = it.groupValues[3].takeIf { s -> s.isNotEmpty() }?.let { s -> ".$s" } ?: ""
        val p4 = it.groupValues[4].takeIf { s -> s.isNotEmpty() }?.let { s -> "-$s" } ?: ""
        "$p1$p2$p3$p4"
    }
}

两种方案效果完全一致,可根据实际场景选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 13:15:01