2014-12-09 5 views
3

나는이 범위에 속하는 문자들만 받아 들여야하는 SWT 텍스트를 가지고있다 : [a-z] [A-Z] [0-9]. 이것을 위해 Text에 KeyListener를 추가했으며 아래에는 코드가 있습니다.SWT 텍스트의 붙여 넣은 텍스트에 키 수신기를 통해 특수 문자가 있는지 확인할 수 있습니까?

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를 통해이를 달성 할 수 있습니까?

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

을 그리고이 예는 모든 특수 문자 필터링 :

+0

당신이 특수를 필터링 하시겠습니까을 특수 문자가 포함되어있는 경우 붙여 넣은 텍스트 삽입을 중지 하시겠습니까? –

답변

3

당신은 VerifyListener 사용할 수 있습니다,이 예제는 1-8에서 숫자를 할 수 있습니다

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