Java 是否可以通过键侦听器检查SWT文本中粘贴的文本是否具有特殊字符?
我有一个SWT文本,它应该只接受在此范围内的字符:[a-z][a-z][0-9]。 为此,我在文本中添加了一个KeyListener,下面是代码Java 是否可以通过键侦听器检查SWT文本中粘贴的文本是否具有特殊字符?,java,swt,jface,Java,Swt,Jface,我有一个SWT文本,它应该只接受在此范围内的字符:[a-z][a-z][0-9]。 为此,我在文本中添加了一个KeyListener,下面是代码 Pattern pattern = Pattern.compile("[a-zA-Z0-9]+"); @Override public void keyPressed(KeyEvent event) { String enteredCharacterInStr = String.valueOf(event.character); b
Pattern pattern = Pattern.compile("[a-zA-Z0-9]+");
@Override
public void keyPressed(KeyEvent event)
{
String enteredCharacterInStr = String.valueOf(event.character);
boolean isAlphaNumeric = pattern.matcher(enteredCharacterInStr).find();
if(event.keyCode == SWT.ARROW_LEFT ||
event.keyCode == SWT.ARROW_RIGHT ||
event.keyCode == SWT.BS ||
event.keyCode == SWT.DEL )
{
event.doit = true;
}
else if(isAlphaNumeric)
{
event.doit = true;
}
else if(event.stateMask == SWT.CTRL && (event.keyCode == 'a' ||
event.keyCode == 'c' ||
event.keyCode == 'v' ||
event.keyCode == 'x' ) )
{
event.doit = true;
}
else
{
event.doit = false;
}
}
上述代码将在用户不输入特殊字符的情况下工作,但在用户复制包含特殊字符的文本并粘贴到文本中时失败
是否可以通过KeyListener实现此目的?您可以使用,此示例仅允许1-8之间的数字:
text.addVerifyListener(new VerifyListener() {
@Override
public void verifyText(VerifyEvent event) {
char[] charArray = event.text.toCharArray();
for (char testChar : charArray) {
if (testChar <= '0' || testChar >= '9') {
event.doit = false;
return;
}
}
}
});
是否要过滤掉特殊字符,或者如果粘贴的文本包含特殊字符,则停止插入?
text.addVerifyListener(new VerifyListener() {
@Override
public void verifyText(VerifyEvent event) {
event.text = event.text.replaceAll("[^A-Za-z0-9]", "");
}
});