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

text长度和字母限制字段

水瀚漠
2023-03-14

我尝试限制javafx文本字段的字母和最大长度。我以前做过很多次,我总是用同样的方法,但这次我犯了错误。

这是我的代码:

nameTextField.textProperty().addListener(new ChangeListener<String>() {
        @Override
        public void changed(final ObservableValue<? extends String> ov, final String oldValue, final String newValue) {
            if (nameTextField.getText().length() > 30) {
                String s = nameTextField.getText().substring(0, 30);
                nameTextField.setText(s);
            }
            if (!newValue.matches("\\sa-zA-Z")) {
                nameTextField.setText(newValue.replaceAll("[^\\sa-zA-Z]", ""));
            }
        }
    });

当我只对最大长度使用限制时,它的工作是正确的,当我只对字母类型使用限制时,它也是正确的。但是当我在一个字段上同时使用两个限制时,就不正确了。

字母类型的限制是正确的,但当我尝试放置超过30个字母时,我遇到了“线程异常”JavaFX应用程序线程“java.lang.StackOverflowerError”

在这条线上

nameTextField.setText(newValue.replaceAll("[^\\sa-zA-Z]", ""));

共有1个答案

陆飞鸿
2023-03-14

正则表达式匹配函数中存在问题。

它总是进入第二个if,并用一个新的字符串替换字符串,即使它超出了限制。

因此,它将文本设置为具有超限字符,然后再次发出更改事件,等等。。。这就是stackoverflow异常的原因。

你应该把这个

 if (!newValue.matches("[a-zA-Z]+")) 

对于最佳实践,您可以使用else if而不是second if

因为这两个条件是不可能实现的。

 类似资料:
  • 问题内容: 我正在寻找一种方法来限制php中的字符串,并在字符串过长时在末尾添加…。 问题答案: 您可以使用类似于以下内容的东西:

  • 本文向大家介绍TextField和TextView限制输入字数长度,包括了TextField和TextView限制输入字数长度的使用技巧和注意事项,需要的朋友参考一下 TextField和TextView限制输入长度的具体实现方法,供大家参考,具体内容如下 TextField的限制代理方法  只需要在这个代理方法里面code这样的代码就可以了 16 是长度可以自己设置 TextView的限制代理方

  • 本文向大家介绍jQuery 限制输入字符串长度,包括了jQuery 限制输入字符串长度的使用技巧和注意事项,需要的朋友参考一下 我们后台做程序的时候,比如录入一篇文章,文章会有摘要,我们希望文章的字符长度是我们可以控制的,我们不希望它太长,比如限制只能输入250个字符,下面的代码实现了这种功能。 先来看一下效果图 代码如下: 以上就是本文的全部内容,希望能给大家一个参考,也希望大家多多支持呐喊教程

  • 问题内容: 我刚刚开始学习我的第一种真正的编程语言Python。我想知道如何将用户输入限制为特定字符和特定长度。例如,如果用户输入的字符串包含除字母以外的任何内容,我想显示一条错误消息,并且我想显示其中一个用户输入的字符超过15个。 第一个似乎是我可以使用正则表达式做的事情,由于我已经在Java语言中使用过它们,所以我对此有所了解,但是我不确定如何在Python中使用它们。第二个,我不确定该如何处

  • 问题内容: 我有以下几点: 有没有一种方法可以将字符串的长度限制为20个字符? 还有一个更好的问题是,如果超过20个字符,有没有办法我可以将字符串更改为截断并显示在末尾? 问题答案: 编辑 最新版本的报价过滤器。 您需要这样的 自定义过滤器 : 用法: 选项: 逐字(布尔)-如果为true,则仅按字数限制切入, max(整数)-文本的最大长度,切成此字符数, tail(字符串,默认值:“…”)-如

  • 问题内容: 我目前是python的新手,并陷入了这个问题,似乎找不到正确的答案。 问题:给出一个单词列表,按长度顺序(最长到最短)返回相同单词的列表,第二个排序标准应按字母顺序。提示:您需要考虑两个功能。 这是我到目前为止所拥有的: 它按长度排序,但我不知道如何将第二个标准应用于这种排序,即按字母顺序降序排列。 问题答案: 您可以按照以下两个步骤进行操作: Python的排序是稳定的,这意味着当长