查找并替换标识号输入掩码的正则表达式
Find and replace regex for identification number input mask
我想帮助使用查找和替换正则表达式为以下用例创建输入掩码:
用户键入其身份证号码的 11 位数字,输出将采用以下格式:
\d\d\d.\d\d\d.\d\d\d-\d\d
第一次尝试
查找:(\d{3})(\d{3})(\d{3})(\d{2})
替换:..-
这仅在用户键入所有 11 位数字后才有效。但是,我希望在用户键入时显示点和破折号。
第二次尝试
查找:(\d{1,3})(\d{1,3})(\d{1,3})(\d{1,2})
替换:..-
当用户输入第四个数字时,结果却变成了这样\d.\d.\d-\d
第三次尝试
查找:(\d{3})(\d{0,3})(\d{0,3})(\d{0,2})
替换:..-
当用户输入第三个数字时,结果却变成了这样\d\d\d\..-
代码:
代码简要说明:
fun transformation(input: String, findRegex: String, replaceRegex: String): String =
input.replace(findRegex.toRegex(), replaceRegex)
fun main() {
val input = "01121212"
val findRegex = """(\d{3})(\d{3})(\d{3})(\d{2})"""
val replaceRegex = """..-"""
val result = transformation(input, findRegex, replaceRegex)
println(result)
}
可在此处找到完整代码:https://gitlab.com/pertence/masked-textinput
您可以使用
fun transformation(input: String, findRegex: String, replaceRegex: String): String =
input.replace("""\D+""".toRegex(), "").replace(findRegex.toRegex(), {
it.groupValues[1].toString() +
(if (!it.groupValues[2].isNullOrEmpty()) ".${it.groupValues[2].toString()}" else "") +
(if (!it.groupValues[3].isNullOrEmpty()) ".${it.groupValues[3].toString()}" else "") +
(if (!it.groupValues[4].isNullOrEmpty()) "-${it.groupValues[4].toString()}" else "")
})
fun main(args: Array<String>) {
val input = "0112121234" // 011.212.123-4
// val input = "011" // 011
// val input = "01121212" // 011.212.12
// val input = "011212" // 011.212
// val input = "01121" // 011.21
// val input = "0112" // 011.2
val findRegex = """^(\d{3})(\d{1,3})?(\d{1,3})?(\d{1,2})?$"""
val replaceRegex = """..-"""
val result = transformation(input, findRegex, replaceRegex)
println(result)
}
注释:
.replace("""\D+""".toRegex(), "")
- 删除所有非数字
.replace(findRegex.toRegex(), { it.groupValues[1].toString() + (if (!it.groupValues[2].isNullOrEmpty()) ".${it.groupValues[2].toString()}" else "") + (if (!it.groupValues[3].isNullOrEmpty()) ".${it.groupValues[3].toString()}" else "") + (if (!it.groupValues[4].isNullOrEmpty()) "-${it.groupValues[4].toString()}" else "") })
- 匹配模式并根据组是否匹配用不同的替换项替换匹配项。
正则表达式是
^(\d{3})(\d{1,3})?(\d{1,3})?(\d{1,2})?$
见regex demo。 详情:
^
- 字符串开头
(\d{3})
- 第 1 组:三位数
(\d{1,3})?
- 匹配一个、两个或三个数字的可选第 2 组
(\d{1,3})?
- 匹配一位、两位或三位数字的可选第 3 组
(\d{1,2})?
- 匹配一个或两个数字的可选第 4 组
$
- 字符串结尾。
我想帮助使用查找和替换正则表达式为以下用例创建输入掩码:
用户键入其身份证号码的 11 位数字,输出将采用以下格式:
\d\d\d.\d\d\d.\d\d\d-\d\d
第一次尝试
查找:(\d{3})(\d{3})(\d{3})(\d{2})
替换:..-
这仅在用户键入所有 11 位数字后才有效。但是,我希望在用户键入时显示点和破折号。
第二次尝试
查找:(\d{1,3})(\d{1,3})(\d{1,3})(\d{1,2})
替换:..-
当用户输入第四个数字时,结果却变成了这样\d.\d.\d-\d
第三次尝试
查找:(\d{3})(\d{0,3})(\d{0,3})(\d{0,2})
替换:..-
当用户输入第三个数字时,结果却变成了这样\d\d\d\..-
代码:
代码简要说明:
fun transformation(input: String, findRegex: String, replaceRegex: String): String =
input.replace(findRegex.toRegex(), replaceRegex)
fun main() {
val input = "01121212"
val findRegex = """(\d{3})(\d{3})(\d{3})(\d{2})"""
val replaceRegex = """..-"""
val result = transformation(input, findRegex, replaceRegex)
println(result)
}
可在此处找到完整代码:https://gitlab.com/pertence/masked-textinput
您可以使用
fun transformation(input: String, findRegex: String, replaceRegex: String): String =
input.replace("""\D+""".toRegex(), "").replace(findRegex.toRegex(), {
it.groupValues[1].toString() +
(if (!it.groupValues[2].isNullOrEmpty()) ".${it.groupValues[2].toString()}" else "") +
(if (!it.groupValues[3].isNullOrEmpty()) ".${it.groupValues[3].toString()}" else "") +
(if (!it.groupValues[4].isNullOrEmpty()) "-${it.groupValues[4].toString()}" else "")
})
fun main(args: Array<String>) {
val input = "0112121234" // 011.212.123-4
// val input = "011" // 011
// val input = "01121212" // 011.212.12
// val input = "011212" // 011.212
// val input = "01121" // 011.21
// val input = "0112" // 011.2
val findRegex = """^(\d{3})(\d{1,3})?(\d{1,3})?(\d{1,2})?$"""
val replaceRegex = """..-"""
val result = transformation(input, findRegex, replaceRegex)
println(result)
}
注释:
.replace("""\D+""".toRegex(), "")
- 删除所有非数字.replace(findRegex.toRegex(), { it.groupValues[1].toString() + (if (!it.groupValues[2].isNullOrEmpty()) ".${it.groupValues[2].toString()}" else "") + (if (!it.groupValues[3].isNullOrEmpty()) ".${it.groupValues[3].toString()}" else "") + (if (!it.groupValues[4].isNullOrEmpty()) "-${it.groupValues[4].toString()}" else "") })
- 匹配模式并根据组是否匹配用不同的替换项替换匹配项。
正则表达式是
^(\d{3})(\d{1,3})?(\d{1,3})?(\d{1,2})?$
见regex demo。 详情:
^
- 字符串开头(\d{3})
- 第 1 组:三位数(\d{1,3})?
- 匹配一个、两个或三个数字的可选第 2 组(\d{1,3})?
- 匹配一位、两位或三位数字的可选第 3 组(\d{1,2})?
- 匹配一个或两个数字的可选第 4 组$
- 字符串结尾。