使用Java模式API在EdiText上筛选条件



我有以下要求:

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

最小值:0

最大值:10

中间值(max和Min之间)可以是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及以上,它不接受任何小数,这是正确的。

ii>在0.0 - 9.9的范围内接受十进制后的一个数字,这也是正确的。

但是它接受0、0.1、0.2 .....的值9.8 9.9 10,11,12 ...........99

如何在现有条件下将值限制为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;
      }
  }

最新更新