2015-09-07 51 views
2

我有以下要求。使用Java模式API在EdiText上过滤条件

用户只能在Android 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及以上,它不接受任何小数,这是正确的。

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

但它接受来自0,0.1,0.2 9.8 .....,9.9,10,11,12 99 ...........

如何限制值以值10与现有条件?

任何建议将有所帮助。

回答

2

试试这个:

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; 
     } 
    } 
+0

当我添加此代码作为输入过滤器,我无法对的EditText – chiranjib

+0

添加任何东西请检查我的更新 –

+0

有了更新的代码,我无法进入像1.2的值 – chiranjib