Is it possible to check if embedded text in SWT text has special characters through a key listener?

I have a SWT text that should only accept characters that fall within this range: [az] [AZ] [0-9]. To do this, I added a KeyListener to the text and below is the code.

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;
    }

}

      

The above code will work from the fact that the user does not enter special characters, but fails when the user copies text containing special characters and pastes in the text.

Is it possible to achieve this through a KeyListener?

+3


source to share


1 answer


You can use VerifyListener , this example only allows numbers from 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;
                }
            }
        }
    });

      



And this example filters out all special characters:

    text.addVerifyListener(new VerifyListener() {
        @Override
        public void verifyText(VerifyEvent event) {
            event.text = event.text.replaceAll("[^A-Za-z0-9]", "");
        }
    });

      

+3


source







All Articles