目前我正在使用过滤器(用于格式化货币),但是,用户仍然可以输入前导零:
00000334.43 // Is accepted but shouldn't be..
03000334.43 // I don't want a leading zero unless followed by a .
如果它是.
之前的零,我想只接受前导零。
我理解空格editText
,这是不可能的,所以我想删除零,除非用户之后键入.
,在该用例中,例如:
User types 0 // 0 - Ok
User types . // 0. - This is fine
0 // 0 - Ok
4 // 04 - Not ok, 0 should be removed from the text edit.
我在一个扩展DigitsKeyListener
类的自定义类中执行此操作 - 使用后者的filter()
方法:
public CharSequence filter(CharSequence source, int start, int end, Spanned dest,
int dstart, int dend)
{
// How can I achieve this inside the filter method?
}
到目前为止我尝试了什么:
replaceFirst()
- 我试图使用这个正则表达式 - .replaceFirst("^0+(?!$)", "")
但是在输入后尝试在开头插入数字时会导致问题。我也不确定如何在滤镜方法中正确使用它。
感谢任何帮助。
答案 0 :(得分:0)
看起来像.replaceFirst中的这个正则表达式应该工作:
^0+(?=\d)
尝试一下,看看是否有帮助。
答案 1 :(得分:0)
为此制作输入过滤器:
const val separator = "."
private val filterAmountValue: InputFilter = object : InputFilter {
override fun filter(
source: CharSequence?,
start: Int,
end: Int,
dest: Spanned?,
dstart: Int,
dend: Int
): CharSequence? {
dest?.toString()?.replace(",", ".")?.let { s ->
if (s.isNotEmpty() && s[0] == '0' && source != ".")
return ""`enter code here`
}
return null
}
}
fun EditText.setAmountFilter() {
filters = arrayOf(filterAmountValue)
}