Я хотел бы помочь создать маскировку ввода с помощью регулярных выражений поиска и замены для следующего варианта использования:
Пользователь вводит 11 цифр своего идентификационного номера, и вывод будет иметь следующий формат:
\d\d\d.\d\d\d.\d\d\d-\d\d
Первая попытка
Найти: (\d{3})(\d{3})(\d{3})(\d{2})
Заменить: $1.$2.$3-$4
Это работает только после того, как пользователь введет все 11 цифр. Однако я хочу, чтобы точки и тире появлялись, когда пользователь печатает.
Вторая попытка
Найти: (\d{1,3})(\d{1,3})(\d{1,3})(\d{1,2})
Заменить: $1.$2.$3-$4
Как только пользователь вводит четвертую цифру, а результат получается таким \d.\d.\d-\d
Третья попытка
Найти: (\d{3})(\d{0,3})(\d{0,3})(\d{0,2})
Заменить: $1.$2.$3-$4
Как только пользователь вводит третью цифру, а результат получается таким \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 = """$1.$2.$3-$4"""
val result = transformation(input, findRegex, replaceRegex)
println(result)
}
Полный код можно найти здесь: https://gitlab.com/pertence/masked-textinput.
01121212
не соответствует вашему образцу.01121212000
будет соответствовать. Если вам нужно заменить частичные совпадения, вам понадобится callable в замене. - person Wiktor Stribiżew   schedule 17.07.2021