除非后跟一个点,否则防止前导零?

时间:2014-02-23 00:04:56

标签: java android regex android-edittext currency-formatting

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

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

感谢任何帮助。

2 个答案:

答案 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)
}