我正在寻找一些帮助来获取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 :(得分: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+
- 一位或多位