【问题标题】:android regex and decimal formatandroid正则表达式和十进制格式
【发布时间】:2016-08-18 05:27:51
【问题描述】:

我在数据库中有一个列 Number(9,4)。我想发送到输入edittext的列数据。

我必须控制格式 123456789.1234 并且只控制数字和点。

我找到了数字和点的正则表达式,但我没有十进制格式控制。用户无法输入 123.12345 或 1234567891.1

我该怎么做?

我的正则表达式是:

"^*[0-9\\.]+$"

Edittext控件代码为:

        txtTabelaEni.addTextChangedListener(new TextWatcher() {
        @Override
        public void afterTextChanged(Editable s)
        {
            String text = txtTabelaEni.getText().toString();
            if (text.length() > 0) {
                if (!text.substring(text.length() - 1).matches(regexStr))
                {
                    txtTabelaEni.setText(text.substring(0, text.length() - 1));
                    txtTabelaEni.setSelection(txtTabelaEni.length());
                }
            }
        }
        @Override
        public void onTextChanged(CharSequence s, int st, int b, int c){ }
        @Override
        public void beforeTextChanged(CharSequence s, int st, int c, int a){ }
    });

【问题讨论】:

    标签: regex decimalformat


    【解决方案1】:

    我必须控制格式 123456789.1234 并且只控制数字和点。

    你可以在 Java 中使用这个正则表达式:

    String re = "^\\d{0,9}\\.\\d{1,4}$"
    

    如果您想让小数部分可选,请使用:

    String re = "^(\\d{0,9}\\.\\d{1,4}|\\d{1,9})$"
    

    【讨论】:

    • 我不能用这个正则表达式输入号码?
    • 抱歉没看懂您的评论,能否澄清一下?
    • 当我在我的编辑文本中使用你的正则表达式时,我不能写点(。)并且可以写 12345678912。我不想写超过 9 个字符到点
    • As you can see in this demo 那么这个正则表达式工作正常,12345678912 不被接受。
    • @mobileprogramming 您需要转义反斜杠。 \d 应该是 \\d。否则,Java 编译器将尝试为 d 找到转义序列。
    【解决方案2】:

    试试这个模式:

    \d+($|(\.($|\d+$)))
    

    它查找一个数字序列,然后是一个:

    end of string - matches 123
    a dot and end of string - matches 123.
    a dot and more digits and then end of string - matches 1234.45
    

    后面有字母的A将不匹配

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-12
      • 1970-01-01
      • 2010-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多