Jetpack Compose TextField正则限制:仅允许数字、逗号和单个点
解决Jetpack Compose TextField限制仅输入数字、逗号和单个点的问题
你当前的正则表达式[\d,.]+没有限制点的出现次数,所以会允许多个点输入。要实现仅允许数字、逗号和单个点的需求,需要调整正则表达式,确保整个输入字符串中点的数量不超过1个。
修正后的正则表达式
替换原正则为:
val expression = Regex("^[\\d,]*\\.?[\\d,]*$")
这个正则的规则:
^和$确保匹配整个输入字符串[\\d,]*允许0个或多个数字/逗号\\.?允许0个或1个点(转义\是因为点在正则中是特殊字符)- 整体保证输入内容只能包含数字、逗号,且最多一个点
修改后的完整代码
val expression = Regex("^[\\d,]*\\.?[\\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 = { } ), )
如果需要更严格的格式约束(比如点不能单独出现、逗号后必须跟数字等),可以进一步调整正则,但上述代码已满足你“仅数字、逗号或单个点”的核心需求。
内容的提问来源于stack exchange,提问作者Arshdeep_somal
相关产品推荐
相关产品推荐

