十进制输入过滤器android

时间:2016-05-05 10:56:19

标签: android regex

我想让EditText取十进制值,允许小数点后2位数(可选)。值可以是:

XXXX

xxxx.x

XX.XX

.XX

.X

x.x中

我已经在S / O中尝试了很多解决方案,而且我找到了正确的正则表达式来满足我的解决方案。但没有一个能满足我的要求。某些解决方案符合要求但不允许在小数点之前编辑。假设,当edittext值为.xx时,则无法在小数点(。)之前编辑。

任何人都可以指出正确的解决方案。

N.B。:在EditText中使用maxLength属性。

1 个答案:

答案 0 :(得分:1)

试试这个,

public class DecimalDigitsInputFilter implements InputFilter {

    Pattern mPattern;

    public DecimalDigitsInputFilter(int digitsBeforeZero,int digitsAfterZero) {
        mPattern=Pattern.compile("[0-9]{0," + (digitsBeforeZero-1) + "}+((\\.[0-9]{0," + (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;
        }


    }

并将过滤器设置为编辑文本

editText.setFilters(new InputFilter[] { new DecimalDigitsInputFilter(10, 2) });