当前位置: 首页 > 知识库问答 >
问题:

使TextField只接受字母字符[重复]

范金鑫
2023-03-14
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]", ""));
                }
            }
    });
}

代码可以很好地删除数字,但我不知道该使用什么regex,所以它也可以替换标点符号(例如`,!,],[等等)

有人能帮帮我吗?

共有1个答案

太叔英锐
2023-03-14

首先,不要对此功能使用侦听器。这里的问题是,如果在文本字段的text属性上有另一个侦听器,则该侦听器将在恢复到有效状态之前同时看到无效状态(包含非字符输入)。文本字段上的任何筛选器的目的都应该是确保只看到有效的状态。您应该使用TextFormatter

Regex规则在模式文档中进行了描述。如果要允许任何大小写字母字符,可以使用“[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);
 类似资料:
  • 我试图将文本视图字符限制为英语。但如果我复制并粘贴非英语字符,我的文本视图就会接收这些条目。谁能帮我解决这个问题。UITextView应该只接受英文字符(包括特殊字符、数字和空格)。或者,当我点击done时,如果textview包含非英语字符,它应该验证并向我发送错误消息。 提前谢谢。 下面是我的代码 此代码不允许我输入空格和特殊字符。需要帮忙解决这个问题。

  • 我怎么能做文本字段只接受字母"N或E"在Java?不接受数字和其他字符。 我试过这个,这个对maxValue有用。但我需要文本字段只接受“N”和“E”字符。那么我该怎么做呢?

  • 我需要在Android上实现一个,它只接受特定范围的字符,即:“S、A、Q、W、R、B、C、D、E、U”。

  • 问题内容: 我正在尝试用JavaFX制作数独游戏,但我不知道如何只允许输入一个字母。对此的答案是调用文本字段并执行以下操作: 上面的方法不适用于复制粘贴…或大量其他事情,等等。像这样使用按键监听器似乎是一个AWFUL想法。一定有更好的东西吗?是否存在文本字段的属性,仅允许输入某些字符,或仅允许输入一定数量的字符? 谢谢! 问题答案: 您可以使用来执行此操作。该可以修改都在文本字段做,如果有一个与之

  • 问题内容: 我已经在netbeans注册中完成了一个示例项目。在jtextfield1中是用户ID,在Jtextfiled7中是国家/地区,两者都必须使用非数字字符或不允许的空格和特殊字符。怎么可能? 问题答案: @Vivek, 我对你问的这个问题有答案。请按照以下说明进行操作。 在Netbeans中,右键单击JTextfield,然后选择键入事件>> key >> key,然后在代码之间输入以下