0

目前我正在使用过滤器(用于格式化货币),但是,用户仍然可以输入前导零:

00000334.43 // Is accepted but shouldn't be..
03000334.43 // I don't want a leading zero unless followed by a .

如果它是 a 之前的零,我只想接受前导零.

我知道如果使用空白editText,这是不可能的,所以我想删除零,除非用户在.之后输入 a,在那个用例中,例如:

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+(?!$)", "")但是在键入后尝试在开头插入数字时会导致问题。我也不确定如何在过滤器方法中正确使用它。

任何帮助表示赞赏。

4

2 回答 2

0

看起来 .replaceFirst 中的这个正则表达式应该可以工作: ^0+(?=\d)

试试看,看看是否有帮助。

于 2014-02-23T00:36:46.987 回答
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)
}
于 2021-04-01T09:48:31.943 回答