【问题标题】:java : How to Control the numbers before and after the decimal point using Regexpjava : 如何使用正则表达式控制小数点前后的数字
【发布时间】: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 个小数位。

无法为此获得正确的正则表达式 感谢任何帮助

【问题讨论】:

  • 检查this link
  • 这是否意味着您还想允许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

标签: java android regex


【解决方案1】:

模式:"/\d{3}\.\d{2}$/"

123.34 success
12.34 success
1.34 success
123#34 failed
12.343 failed

如果您想要精确的 3 位数字,请输入 {3} 如果您想要 0-3 位数字,请输入 {0,3}

Verify here

【讨论】:

  • 它在您的代码或该验证链接中不起作用?
  • 在验证链接本身
  • 你的意见是什么。
  • xxx.xx 格式 x.xx 格式 xx.xxx 格式 xx.xx 格式
  • 然后将模式更改为 "/\d{1,3}\.\d{2,3}$/ 。它应该可以工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-16
  • 2015-04-21
  • 1970-01-01
  • 2016-12-14
  • 1970-01-01
  • 2014-09-18
相关资源
最近更新 更多