Предел десятичных знаков в EditText - PullRequest
0 голосов
/ 04 ноября 2019

Я использую поле EditText, в котором пользователь может указать сумму денег.

Я установил для inputType значение numberDecimal, которое отлично работает, за исключением того, что это позволяет вводить числа, например 123.122, что не идеально. за деньги.

Я написал некоторый пользовательский метод InputFilter, и он работает следующим образом. Пользователь может использовать 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 голосов
/ 04 ноября 2019

Ваше сконструированное регулярное выражение неверно.

Первая часть вашего регулярного выражения - это выражение:

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

Скажите digitsBeforeZero = 5, что дает вам:

[0-9]*4}+

Это не правильное регулярное выражение. Предполагается, что регулярное выражение:

[0-9]{1,5}

, что означает от 1 до 5 цифр.

...