用于android的正则表达式/输入过滤器可以防止多个前导零

时间:2015-10-20 06:47:39

标签: java android regex android-input-filter input-filter

我正在寻找一些帮助来获取Android的正则表达式,这可以防止在给定的十进制数字中超过一个前导零。目前,可以在实际数字之前添加任意数量的零。我正在寻找0.1,11.04,0129等数字的支持。不应该允许的数字是.9,0009999.33,0007

现有过滤器类,如下所示:

public class DecimalDigitsInputFilter implements InputFilter{

Pattern mPattern;
int maxDigitsBeforeDecimalPoint = 10;
int maxDigitsAfterDecimalPoint = 2;

public DecimalDigitsInputFilter(int digitsBeforeZero, int digitsAfterZero)
{
    this.maxDigitsBeforeDecimalPoint = digitsBeforeZero;
    this.maxDigitsAfterDecimalPoint = digitsAfterZero;
}

@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart,
        int dend)
{
    StringBuilder builder = new StringBuilder(dest);
    builder.replace(dstart, dend, source.subSequence(start, end).toString());
    if(!builder.toString().matches(
            "(([0-9]{1})([0-9]{0," + (maxDigitsBeforeDecimalPoint - 1) + "})?)?(\\.[0-9]{0,"
                    + maxDigitsAfterDecimalPoint + "})?"))
    {
        if(source.length() == 0)
            return dest.subSequence(dstart, dend);
        return "";
    }
    return null;
}}

提前致谢。

1 个答案:

答案 0 :(得分:0)

允许没有2个或更多前导零的浮点数/整数的正则表达式:

^(?!0{2,})\d+(?:\.\d+)?$

请参阅regex demo

实际上,在开头只检查2 0就足够了(尽管这只是一个品味问题):

^(?!0{2})\d+(?:\.\d+)?$
       ^

在Android中,您可以将以下正则表达式声明与matches()

一起使用
String pattrn = "^(?!0{2,})\\d+(?:\\.\\d+)?";

请参阅IDEONE demo

正则表达式分解:

  • ^(?!0{2,}) - 在开头,检查下一个符号是否不是2个或更多0 s
  • \\d+ - 一位或多位
  • (?:\\.\\d+)? - 1或0个序列
    • \\. - 文字句号
    • \\d+ - 一位或多位