【问题标题】:Regex/Input Filter for android to prevent more than one leading zero用于 android 的正则表达式/输入过滤器以防止多个前导零
【发布时间】:2016-01-18 16:59:07
【问题描述】:

我正在寻找一些帮助来获得适用于 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;
}}

提前致谢。

【问题讨论】:

  • 类似^\\..*|^[0]{2,}.* ?
  • here

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


【解决方案1】:

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

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

regex demo

实际上,一开始只检查 2 个0s 就足够了(尽管这只是个人喜好问题):

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

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

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

IDEONE demo

正则表达式分解:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多