gpt4 book ai didi

java - 使 TextField 只接受字母字符

转载 作者:行者123 更新时间:2023-12-01 19:54:59 27 4
gpt4 key购买 nike

我有这段代码,应该删除任何非字符值并将其替换为空格(它删除非字符值)

public void firstNameOnlyText() {
txtFirstName.textProperty().addListener(new ChangeListener<String>() {
public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {

if (!newValue.matches("\\D*")) {
txtFirstName.setText(newValue.replaceAll("[^\\D]", ""));
}
}
});
}

该代码可以完美地删除数字,但我不知道要使用什么正则表达式,因此它也替换了标点符号(例如 `、!、]、[ 等)

有人可以帮助我吗?

最佳答案

首先,不要使用监听器来实现此功能。这里的问题是,如果您在文本字段的文本属性上有另一个监听器,则该监听器将在恢复到有效状态之前看到无效状态(带有非字符输入)。文本字段上任何类型的过滤器的目的都应该是确保只看到有效的状态。您应该使用 TextFormatter相反。

正则表达式规则在Pattern documentation中描述。 。如果您想允许任何大写或小写字母字符,您可以使用 "[a-zA-Z]";如果您想显式匹配 Character.isLowerCase()Character.isUpperCase() 的规则,您可以使用

“[\\p{javaLowerCase}\\p{javaUpperCase}]”

这是一个例子:

Pattern pattern = Pattern.compile("[a-zA-Z]*");
UnaryOperator<TextFormatter.Change> filter = c -> {
if (pattern.matcher(c.getControlNewText()).matches()) {
return c ;
} else {
return null ;
}
};
TextFormatter<String> formatter = new TextFormatter<>(filter);
txtFirstName.setTextFormatter(formatter);

关于java - 使 TextField 只接受字母字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49902592/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com