使用 TextField Jetpack compose 的正则表达式仅限制数字、逗号 (,) 或仅一个点 (.)

问题描述 投票:0回答:1

我正在致力于在 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 = {  }
        ),
    )
android kotlin android-jetpack-compose android-jetpack android-compose-textfield
1个回答
0
投票

实际上,您使用键盘选项仅接受数字,这就是为什么您不需要验证正则表达式中的数字......但对于您提出的问题,您可以使用此正则表达式:

val expression = Regex("[\\d,]*[.]?[\\d,]*"
  • 问号(?)代表零次或一次出现
  • 星号(*)代表零次或多次出现
  • 加号(+)代表一次或多次出现

注意: 这也将接受点(.) 和逗号(,) 作为第一个和最后一个字符。

而且您也不需要在

it.isEmpty()
lambda 中验证
onValueChange
,因为它也将使用正则表达式进行处理,因为它也接受空字符串。

© www.soinside.com 2019 - 2024. All rights reserved.