Java Regex 8数字 一个总共9个字符的选项小数点



我在我的Android应用程序中有一个TextedIt字段。我需要与此字段匹配的模式为0-8位,然后是一个可选的时期和一个小数点。因此,8个数字 一个总共9个字符的小数点。仅在遵循该期间的情况下才能使用第9位。

应该通过的示例测试用例: 1 12345678 12345678.9 12.3 .5

我的代码如下,


在我的Edittext

mFrequency = (EditText) v.findViewById(R.id.myField)
mFrequency.addTextChangedListener(mFrequencyEditTextListener);
InputFilter[] frequencyViewInputFilters = { new DecimalDigitsInputFilter()};
        mFrequency.addTextChangedListener(mFrequencyEditTextListener);


在我的Decimaldigitsinputfilter类中

public DecimalDigitsInputFilter()
   { 
      mPattern=Pattern.compile("\d{0,8}(\.|(\\.\d))?");
   }

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

它通过了我的所有测试用例,但未能通过以下方式: 123456789
它允许用户输入9位数字,而没有最后一个数字之前的时间。

我以前的正则是\d{0,8}(\.|(\.\d))?
它允许用户输入123456789以及12345678.99


任何帮助将不胜感激。

此正则应该有效:

d{0,8}(?:.d)?

解释

d{0,8}匹配0至8位数字。

(?:.d)匹配一个时期,然后是数字。

?使上一位可选。

最新更新