如何将正则表达式添加到textfieldtablecell?

时间:2019-09-22 17:29:08

标签: javafx

我必须使用textfieldtablecell或类似此代码的另一种方式向textproperty添加正则表达式或模式,但这只是简单的textfield

textfield.textProperty().addListener((observable, oldValue, newValue) -> {
     if (!newValue.matches("\\sa-zA-Z0-9*._ ")) {
         if (!newValue.matches("\\d*")) {
            textfield.setText(newValue.replaceAll("[^\\sa-zA-Z0-9 ._]", ""));
         }
     }
});

1 个答案:

答案 0 :(得分:3)

正如kleopatra建议的那样,您应该使用TextFormatter,例如:

TextField textField = new TextField();
textField.setTextFormatter(new TextFormatter<String>(change -> {
    String text = change.getControlNewText();
    if (text.length() == 0 || text.matches(MY_REGEX)) {
        return change;
    }
    return null;
}));

注意:

  1. 需要长度检查才能清除文本字段(带Backspace)

  2. 应该正确定义
  3. MY_REGEX以便每次键入字符时都能达到要求。

    • 例如,如果您有[A-Z] {2},则不会输入 A ,但可以粘贴 AB ,例如