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()
。