Java .匹配(正则表达式)错误

Java .匹配(正则表达式)错误,java,regex,swing,keylistener,Java,Regex,Swing,Keylistener,我在密钥侦听器中有以下代码: c = char c = e.getKeyChar(); if(c==KeyEvent.VK_BACK_SPACE) { boolean vFormandPresChck = txtAddressLine1.getText(). matches("((?=.*[0-9])(?=.*[a-zA-Z]))"); if(vFormandPresChck==true) {

我在密钥侦听器中有以下代码:

c = char c = e.getKeyChar();

if(c==KeyEvent.VK_BACK_SPACE) {

    boolean vFormandPresChck = txtAddressLine1.getText().
        matches("((?=.*[0-9])(?=.*[a-zA-Z]))");
                
    if(vFormandPresChck==true) {
        btnAddAthlete.setEnabled(true);
    } else {
        btnAddAthlete.setEnabled(false);
    }
}
据我所知,我的规则应该确保文本字段中的字符串至少有一个字母和一个数字,然后单击退格键。然而,这似乎不起作用。例如,当文本字段中的字符串为
4 Alde
时单击退格,按钮应保持启用状态,因为该字符串将为
4 Alde
,但不会保持启用状态。我将非常感谢您对这个问题的任何帮助

编辑
我已经在regex101网站上检查过了,似乎认为它应该可以工作,所以有人能澄清一下这段代码是否已损坏,或者它是否是我代码其余部分中的一个错误

看起来正则表达式遗漏了您在示例中写入的空白字符

在任何情况下,正则表达式看起来都要比没有正则表达式复杂得多。你不需要任何组匹配就可以得到你喜欢做的事情

假设要匹配后跟字符的数字(中间有可选空格),可以使用如下所示的正则表达式:

"[0-9]+\s*[a-zA-Z]+"
"[0-9]+\s*[A-Z][a-zA-Z\s]*"
使用
匹配正确的

简短的解释: 此正则表达式由三个组件组成:

  • [0-9]+
    -任意数量的数字,但至少一个
  • \s*”
    -任何数量的空格字符(空格、制表符等),也不允许有空格
  • [a-zA-Z]+
    -任意数量的大写和非大写字符,但至少有一个
  • 您还可以进行一些小的更改,以强制使用大写字符后跟任意数量的大写或非大写字符。这可以通过将最后一部分更改为:
    [a-Z][a-zA-Z]*

    此外,如果您希望姓氏组件包含空格,您可以将这些空格添加到允许的字符组中,只需将
    \s
    添加到方括号中即可

    所以最终你可能会得到这样的结果:

    "[0-9]+\s*[a-zA-Z]+"
    
    "[0-9]+\s*[A-Z][a-zA-Z\s]*"
    

    但这只是一个建议,让您知道这里可以做些什么。

    正则表达式似乎没问题。您到底想匹配什么?至少一个数字后跟至少一个字符?您的正则表达式似乎缺少写入示例字符串的空间。那么我该如何向其中添加空间呢?我还没有用以前的空格也只是在字符串中没有空格的情况下尝试过,但是@nitram在没有看到实际字符串的情况下仍然不起作用,这很难说。请记住:
    matches()
    尝试匹配整个字符串,而不仅仅是其中的一部分。也许您希望改为
    find()