【问题标题】:Regex in Java to only allow digits and pointsJava中的正则表达式只允许数字和点
【发布时间】:2020-05-11 21:57:40
【问题描述】:

我正在努力解决 TextField 的限制,它只能输入除以点的数字。这是我得到的:

 public static void allowOnlyNumbersAndPoints(final TextField tf) {
        tf.textProperty().addListener(new ChangeListener<String>() {
            @Override
            public void changed(final ObservableValue<? extends String> ov, final String oldValue, final String newValue) {
                if (!newValue.matches("\\d+(\\.\\d+)*$")) {
                    tf.setText(newValue.replaceAll("[^\\d]", ""));
                }
            }
        });

    }

如何也用“”替换点?

谢谢:)

【问题讨论】:

  • 通常最好改用use a TextFormatter,这样就不会抑制用户的编辑能力。作为奖励,您不必假设 . 是小数分隔符(因为在许多语言环境中,它不是)。例如,tf.setTextFormatter(new TextFormatter&lt;Number&gt;(new NumberStringConverter()));

标签: java regex validation


【解决方案1】:

您可以使用\\d+\\.?\\d*

演示:

public class Main {
    public static void main(String[] args) {
        String[] testStrs = { "100", "123.23", "a1", "1a", "a1.2", "0.23" };
        for (String s : testStrs) {
            System.out.println(s + (s.matches("\\d+\\.?\\d*") ? " matches " : " doesn't match"));
        }
    }
}

输出:

100 matches 
123.23 matches 
a1 doesn't match
1a doesn't match
a1.2 doesn't match
0.23 matches 

【讨论】:

    【解决方案2】:

    您必须在调用replaceAll 时使用正则表达式"[^0-9]" 来替换任何不是数字的内容。 "[^\\d]"(您目前拥有的)不应该工作,因为命名组在方括号内不起作用。

    【讨论】:

      【解决方案3】:

      这可能有效\d+[\d.]*[\d$]*

      您是指点数还是多点?

      【讨论】:

        【解决方案4】:

        这样试试吧。

        String r = "(?:\\d+)?[\\.]?\\d+|\\d+\\.";
        
        for (String num : new String[] { "2.33", "33.3", "33", ".33",
                "44.", "4.4.4", "a.3", "44.k" }) {
            System.out.printf("%5s : %s%n", num,
                    " " + (num.matches(r) ? "valid" : "not valid"));
        
        }
        

        打印

         2.33 :  valid
         33.3 :  valid
           33 :  valid
          .33 :  valid
          44. :  valid
        4.4.4 :  not valid
          a.3 :  not valid
         44.k :  not valid
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-07-26
          • 1970-01-01
          • 2011-05-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多