EditText
사전 정의 된 단어 하나를 제외하고 어떻게 제한 할 수 있습니까?EditText를 특정 단어로만 작성하십시오.
입력이 정확히 "Hello"(대소 문자 무시) 여야한다고 가정 해 보겠습니다. 따라서 문자는 "안녕하세요"의 문자를 제외하고는 무시됩니다.
TextWatcher
을 사용하고 수동으로 문자를 확인하고 싶지는 않습니다. 내가 어떻게 InputFilter
과 Regex
을 사용하여 할 수 있을지 궁금하네요?
InputFilter onboardingFilter = new InputFilter() {
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
for (int i = start; i < end; i++) {
String checkMe = String.valueOf(source.charAt(i));
Pattern pattern = Pattern.compile("hello", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(checkMe);
boolean valid = matcher.matches();
if(!valid){
return "";
}
}
return null;
}
};
이 입력 아무것도 나를하지 않습니다. 나는 문제가 정규식 안에 있다는 것을 믿는다.
. 'last = ""'모든 입력에 대해 항상 – AnZ
은 InputFilter의 인스턴스를 둘러싼 클래스의 멤버 여야합니다. 그것은 matcher.matches()가 true를 반환 할 때마다 현재 소스로 설정되고, 따라서 여러분은 통과 할 때 sourceAsRegex와 마지막 값이 (초기 상태에서) 각각 "^", "">> "^ h" , "h">> "^ he", "he">> 등등. 이제 내가 거기에 ap를 넣고, "^ hep"는 "hello"내에서 검색을 실패하고 마지막으로 설정하지 않기 때문에 " 그 "와 입력 필드가 변경되지 않은 채로 남아 있어야합니다. – Guardanis
matcher.matches()를 matcher.find()로 바꾸어보십시오. 제대로 작동해야합니다. – Guardanis