android - 十进制输入过滤器android

标签 android regex

我想制作一个 EditText 以采用十进制值,其中允许小数点后 2 位数字(可选)。值可以是:

xxxx

xxxx.x

xx.xx

.xx

.x

x.x

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

谁能指出正确的解决方案。

注意:在 EditText 中使用 maxLength 属性。

最佳答案

试试这个,

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) });

关于android - 十进制输入过滤器android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37048790/

相关文章:

regex - 在 bash 中使用 SED 打印 RegEx 匹配项

javascript - 如何循环匹配正则表达式的所有元素?

regex - 如何使 javascript regex 在 postgresql regexp_matches 中工作?

java - 禁用和重新启用 EditText 字段 : Cursor and keyboard do not reappear after re-enabling it

java - 在方向更改中更改 fragment 宽度

android - 如何在 android Activity 完成后刷新 fragment ?

c# - 正则表达式匹配 CSV 文件

C# 正则表达式替换帮助

java - 手动编译android应用程序的麻烦

android - 在 Android Oreo 及更高版本上根据 FCM 通知唤醒我的应用