限制EditText中的小数位

时间:2019-11-04 14:40:01

标签: java android android-edittext android-input-filter

我正在使用EditText字段,用户可以在其中指定金额。

我将inputType设置为numberDecimal,这很好用,除了它允许输入数字123.122,这对于钱来说并不完美。

我写了一些自定义的InputFilter方法,它的工作方式是这样。用户可以在点2和点2之后添加5个元素,但不能正常工作 我的目标是:

1)使用时最多应输入9999.99

2)如果用户从0开始且第二个元素也为0,则它​​必须替换为。(例如0.0),并在点之后两个元素之后替换(例如0.01) 这是我的代码

 public class DecimalDigitsInputFilter implements InputFilter {

    Pattern mPattern;
    public DecimalDigitsInputFilter(int digitsBeforeZero,int digitsAfterZero) {
        mPattern=Pattern.compile("[0-9]*" + (digitsBeforeZero-1) + "}+((\\.[0-9]*" + (digitsAfterZero-1) + "})?)||(\\.)?");
    }

    @Override
    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {

        Matcher matcher=mPattern.matcher(dest);
        if(!matcher.matches())
            return "";
        return null;
    }

}

我这样叫这个方法

amountValue.setFilters(new InputFilter[] {new DecimalDigitsInputFilter(5,2)});

如何重写代码以解决问题? 谢谢

1 个答案:

答案 0 :(得分:0)

您构造的正则表达式完全错误。

正则表达式的第一部分是以下表达式:

"[0-9]*" + (digitsBeforeZero-1) + "}+"

digitsBeforeZero = 5,这可以使您:

[0-9]*4}+

那不是正确的正则表达式。正则表达式应该是:

[0-9]{1,5}

表示1到5位数字。