我正在致力于在 Jetpack Compose 中自定义 TextField,我希望将用户的输入限制为数字、逗号或单个点。
我当前使用的正则表达式是
val expression = Regex("[\\d,.]+")
。它适用于数字和逗号,但我可以输入我不想要的多个点(.)。我只想要一个点。
这是我的 Jetpack Compose 代码。
val expression = Regex("[\\d,.]+")
val keyboardOptions = KeyboardOptions(
keyboardType = KeyboardType.Number,
imeAction = ImeAction.Done
)
TextField(
value = text,
onValueChange = {
if (it.isEmpty() || it.matches(expression))
onValueChange(it)
},
keyboardOptions = keyboardOptions,
keyboardActions = KeyboardActions(
onDone = { }
),
)
实际上,您使用键盘选项仅接受数字,这就是为什么您不需要验证正则表达式中的数字......但对于您提出的问题,您可以使用此正则表达式:
val expression = Regex("[\\d,]*[.]?[\\d,]*"
注意: 这也将接受点(.) 和逗号(,) 作为第一个和最后一个字符。
而且您也不需要在
it.isEmpty()
lambda 中验证 onValueChange
,因为它也将使用正则表达式进行处理,因为它也接受空字符串。