【发布时间】:2016-08-26 05:53:27
【问题描述】:
在我的应用程序中,我使用了大量的编辑文本,每个编辑文本将允许数字和十进制数字不同
Eg: edittext1 should hav : xxx.xx format
edittext2 should hav : x.xx format
edittext3 should hav : xx.xxx format
edittex4 should hav : xx.xx format
尝试在编辑文本上使用 InputFilter,我在下面的代码中使用了我在 SO 中获得的代码
public class DecimalDigitsInputFilter implements InputFilter {
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;
}
}
myText.setFilters(new InputFilter[] {new DecimalDigitsInputFilter(3,2)});
它部分地解决了问题。 当我通过 DecimalDigitsInputFilter(3,2)
时,我在看什么用户应该能够输入 3 位数字和第 4 个字母,点 (.) 应该可以限制所有其他符号条目和点后 2 个小数位。
无法为此获得正确的正则表达式 感谢任何帮助
【问题讨论】:
-
这是否意味着您还想允许
345.之类的值和空值?试试mPattern=Pattern.compile("^[0-9]{0," + (digitsBeforeZero-1) + "}(?:\\.[0-9]{0," + (digitsAfterZero-1) + "})?$");。但是,这也将允许.输入。如果您不想要它,请尝试使用Pattern.compile("^[0-9]{0," + (digitsBeforeZero-1) + "}(?:\\.[0-9]{1," + (digitsAfterZero-1) + "})?$");(但这个不允许使用345.)。如果您使用的是matches(),则锚点是多余的,但对于那些想要在正则表达式测试站点进行测试的人来说非常有用。 -
哦,你的意思是说我也不能输入 345.00?除了点之外的 3 位数字后,不应允许任何数字。. 不能使用 match()?
-
@WiktorStribiżew 你的第一个表达式正在工作,但是当我给出 (4,2) 时它应该允许 234.22,第 4 个字母应该是点..可能吗?
-
如果您删除
-1,我认为它会起作用 - regex101.com/r/iQ2nH8/1。为什么你有digitsBeforeZero-1/digitsAfterZero-1?使用digitsBeforeZero/digitsAfterZero。然后DecimalDigitsInputFilter(4,2)将匹配234.22。