Я пытаюсь проверить TextFields при составлении с помощью Regex и уперся в стену.
Мне нужно, чтобы ввод был следующим (0 — это цифры 0–9, 9 — это явно 9):
0.009
Для справки:
Я хочу, чтобы он был заполнен таким образом, чтобы пользователю предлагалось ввести ЦИФРУ, затем «.», затем ЦИФРУ, затем ЦИФРУ, затем «9».
Вот моя текущая попытка:
val re = remember { Regex("(^[0-9]{1})[.]([0-9]{2})?(9)?") }
OutlinedTextField(
modifier = Modifier.width(180.dp),
value = price,
onValueChange = {
if (it.isEmpty() || it.matches(re)) {
priceChanged(it) }
},
При применении к приложению я получаю текстовое поле, которое не позволяет мне вводить какие-либо цифры или десятичную точку для выполнения указанного условия, поскольку оно не соответствует выстроенному формату.
В настоящее время мой код проверяется при каждом вводе
Можете ли вы привести пример входных данных, которые должны пройти, а некоторые нет? Сколько цифр допускается до десятичной точки? Сколько разрешено после? 9 в конце необязательна или обязательна? И нужны ли вам совпадения регулярного выражения? Вы используете круглые скобки, хотя говорите, что хотите просто проверить совпадение, а не сами совпадения.
Попробуйте ^(?:[0-9](?:[.](?:[0-9](?:[0-9]9?)?)?)?)?$
@Leviathan Первый абзац описывает формат. 1 цифра, десятичная точка, 2 цифры, 9.
В регулярном выражении есть ? после ([0-9]{2}) и (9). Это делает их необязательными, но вы сказали, что они необходимы.
@Бармер: Я знаю, но сомневаюсь, что это именно то, чего хотел оператор, поэтому и просьба о разъяснениях. :)





Вы можете использовать
val re = remember { Regex("^(?:[0-9](?:[.](?:[0-9](?:[0-9]9?)?)?)?)?$") }
Целью выражения является сопоставление любого следующего символа, если предыдущий символ является разрешенным.
Итак, первой идет любая цифра, потом должна прийти ., потом любая цифра, снова любая цифра и потом 9 цифра.
Вы можете протестировать это здесь.
Вы проверяете формат, пока пользователь печатает? Вам придется подождать, пока они закончат ввод номера, прежде чем проверять его, поскольку частичный ввод не будет совпадать.