使用Java模式API过滤EditText上的条件

使用Java模式API过滤EditText上的条件,java,android,Java,Android,我有以下要求 用户只能在Android EditText上输入以下范围的任何值,该EditText接受数字和小数,但不接受负数 最小值:0 最大值:10 中间值(最大值和最小值之间)可以是0.1、0.2、0.3。。。。。9.8,9.9,10 我使用了Java模式进行实现 int digitsBeforeZero = 2; int digitsAfterZero = 1; public class DecimalDigitsInputFilter implements InputFil

我有以下要求

用户只能在Android EditText上输入以下范围的任何值,该EditText接受数字和小数,但不接受负数

最小值:0

最大值:10

中间值(最大值和最小值之间)可以是0.1、0.2、0.3。。。。。9.8,9.9,10

我使用了Java模式进行实现

int digitsBeforeZero = 2;
int digitsAfterZero = 1;


    public class DecimalDigitsInputFilter implements InputFilter {

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

        }
上述代码适用于以下条件

i> 对于值10及以上,它不接受任何小数,这是正确的

它接受0.0-9.9范围内小数点后的一个数字,这也是正确的

但它接受0、0.1、0.2….的值。。。。。9.8 , 9.9 , 10 , 11 , 12 ........... 九十九

如何在现有条件下将值限制为10

任何建议都会有帮助。

试试以下方法:

 public class DecimalDigitsInputFilter implements InputFilter {

      private final Pattern mPattern = Pattern.compile("((10)|([0-9]?(\\.[0-9]?)?))");
      @Override
      public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart,
                                 int dend) {
        final StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append(dest, 0, dstart);
        stringBuilder.append(source, start, end);
        stringBuilder.append(dest, dend, dest.length());
        Matcher matcher = mPattern.matcher(stringBuilder);
        if (!matcher.matches())
          return dest.subSequence(dstart,dend);
        return null;
      }
  }

当我将此代码添加为InputFilter时,我无法使用更新的代码在EditText上添加任何内容,我无法输入1.2之类的值。您是否使用了整个筛选器?