首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >限制TextField中的文本输入

限制TextField中的文本输入
EN

Stack Overflow用户
提问于 2015-03-16 02:18:32
回答 3查看 2.7K关注 0票数 1

如何将文本输入到TextField中,仅限于数字和字母是唯一有效的字符?我看到了很多答案,我试过其中之一,但出于某种原因,我不能使用后台空间。这门课在下面。

代码语言:javascript
运行
复制
private class NoSpaceField extends TextField {

        public void replaceText(int start, int end, String text) {
            String old = getText();
            if (text.matches("[A-Za-z0-9\b]")) {
                super.replaceText(start, end, text);
            }
            if (getText().length() > 16)
                setText(old);
            positionCaret(getText().length());
        }

        public void replaceSelection(String text) {
            String old = getText();
            if (text.matches("[A-Za-z0-9\b]")) {
                super.replaceSelection(text);
            }
            if (getText().length() > 16)
                setText(old);
            positionCaret(getText().length());
        }
    }

我在RegEx方面很糟糕,也不知道如何将backspace作为一个有效字符添加。另外,我已经将上面的类(稍微修改了一下)用于不同的用途,而且它工作得很好。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-03-16 12:24:00

删除字符是通过使用空字符串和表示要删除的字符位置的索引调用replaceText来执行的。由于正则表达式与空字符串不匹配,因此将忽略删除。

您可能想要的是接受“零或更多”有效字符。这样,您将识别一个空字符串,以及支持多个字符的复制和粘贴。这个正则表达式看起来就像

代码语言:javascript
运行
复制
private class NoSpaceField extends TextField {

    public void replaceText(int start, int end, String text) {
        String old = getText();
        if (text.matches("[A-Za-z0-9]*")) {
            super.replaceText(start, end, text);
        }
        if (getText().length() > 16)
            setText(old);
        positionCaret(getText().length());
    }

    public void replaceSelection(String text) {
        String old = getText();
        if (text.matches("[A-Za-z0-9]*")) {
            super.replaceSelection(text);
        }
        if (getText().length() > 16)
            setText(old);
        positionCaret(getText().length());
    }
}
票数 0
EN

Stack Overflow用户

发布于 2015-03-16 04:45:28

如果您在Java8u40上,您可以使用TextFormatter,即像这样的过滤器:

代码语言:javascript
运行
复制
TextField textField = new TextField();

TextFormatter<String> formatter = new TextFormatter<String>( change -> {
    change.setText(change.getText().replaceAll("[^a-zA-Z0-9]", ""));
    return change; 

});
textField.setTextFormatter(formatter);

这也解决了当您将一些无效文本粘贴到textfield中时的问题。

如果您使用的是较低的jdk,那么您可能希望使用Christian Schudt的RestrictiveTextField。允许您限制字符,并仍然使用光标键,后退空间等。

票数 1
EN

Stack Overflow用户

发布于 2015-03-16 02:29:02

B是后置字符的ascii代码。你可以在你的regex里用这个。

text.matches("A-Za-z0-9\b")

应该做点什么

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29068691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档