我必须使用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 ._]", ""));
}
}
});
答案 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;
}));
注意:
需要长度检查才能清除文本字段(带Backspace)
MY_REGEX
以便每次键入字符时都能达到要求。