求Kotlin正则表达式:限制输入合法金额(数字键盘含多余符号)
合法金额输入的Kotlin正则表达式方案
正则表达式说明
针对你需要限制输入框仅允许合法金额(整数或两位小数,无负号、空格等非法字符)的需求,推荐以下正则表达式:
val amountRegex = Regex("^(0|[1-9]\\d*)(\\.\\d{2})?$")
规则拆解
- 整数部分:
- 允许单个
0(对应金额0) - 非零开头的数字串(避免
00200这类前导零的无效格式;若业务允许前导零,可简化为\\d+)
- 允许单个
- 小数部分:
- 可选存在,若存在则必须是
.后跟恰好两位数字(匹配200.00这类格式,拒绝200.或200.1这类不完整小数)
- 可选存在,若存在则必须是
- 整体锚定:用
^和$确保整个输入内容完全匹配规则,自动排除空格、减号等非法字符
输入验证示例
- 合法输入:
200、200.00、0、0.00、1234.56 - 非法输入:
-200、200(带空格)、.00(无整数部分)、200.1(一位小数)、200.000(三位小数)、00200(前导零,若用上述正则则非法)
输入框实时过滤示例
如果需要通过TextWatcher实时拦截非法输入,可参考以下逻辑:
editText.addTextChangedListener(object : TextWatcher { override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {} override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {} override fun afterTextChanged(s: Editable?) { val input = s?.toString() ?: "" if (input.isNotEmpty() && !amountRegex.matches(input)) { // 移除最后输入的非法字符 s?.delete(input.length - 1, input.length) } } })
内容的提问来源于stack exchange,提问作者Aditya Nandardhane
相关产品推荐
相关产品推荐

