下面的 Java 正则表达式在我的程序中的 TextField 中运行。它将允许用户仅输入数字[0-9],按键盘TAB和ESCAPE。如何允许按键盘 BACKSPACE 和 DELETE 键?
void restrictNumbersOnly(KeyEvent keyEvent) {
if (keyEvent.getCharacter().matches("[^\\e\t\r\\d+$]")) {
/* SOME WARNING MSG */
keyEvent.consume();
}
}
keyEvent.getCode() == KeyCode.BACK_SPACE
不起作用。我尝试这样做:
void restrictLettersOnly(KeyEvent keyEvent) {
if (keyEvent.getCharacter().matches("[^\\e\t\r\\d+$]")) {
if (keyEvent.getCode() == KeyCode.BACK_SPACE) {
/* DO NOTHING */
} else {
/* SOME WARNING MSG */
keyEvent.consume();
}
}
}
最佳答案
我更改了问题标题以帮助其他人更好地搜索。
所以,我通过这样做解决了这个问题:
只允许输入字母:
textField.textProperty().addListener((observable, oldValue, newValue) -> {
if (!newValue.matches("\\sa-zA-Z*")) {
textField.setText(newValue.replaceAll("[^\\sa-zA-Z]", ""));
}
});
只允许输入数字:
textField.textProperty().addListener((observable, oldValue, newValue) -> {
if (!newValue.matches("\\d*")) {
textField.setText(newValue.replaceAll("[^\\d]", ""));
}
});
这些代码还允许用户按ESCAPEDELETEBACKSPACESPACE...等等...
关于JavaFX 只能输入数字或字母,并允许按 TAB/ESCAPE/BACKSPACE 等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41107912/