Запретить редактируемому тексту принимать специальные символы

#android

#Android

Вопрос:

У меня есть edittext, который принимает некоторый пользовательский ввод, у меня есть регулярное выражение, разрешающее a-z A-Z 0-9 @-_ Я хочу запретить пользователю вводить любой другой символ, кроме этого регулярного выражения. на данный момент мой код работает нормально, если пользователь вводит символ, отличный от этого регулярного выражения, edittext выдает ошибку, но я хочу, чтобы пользователь не мог вводить другие символы, кроме этого регулярного выражения.

вот мой код для проверки регулярного выражения.

 editTextUsername.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

        }

        @Override
        public void afterTextChanged(Editable s) {
            ims = imm.getCurrentInputMethodSubtype();

            String localeKeyboard = ims.getLocale();

            if(localeKeyboard.equalsIgnoreCase(LocaleManager.LANGUAGE_ARABIC)){
                editTextUsername.setError(null);
            }
            else{
                if(UtilHelper.isValidNameSubject(editTextUsername.getText().toString())){
                    editTextUsername.setError(null);
                }
                else{
                    editTextUsername.setError(getString(R.string.txt_invalid_name));
                }
            }
        }
    });
  

И это мое регулярное выражение,

 "^[a-zA-Z0-9ء-ي@_ -]*$"
  

Ответ №1:

Вы можете попробовать что-то подобное в своем TextWatcher

     @Override
    public void afterTextChanged(Editable s) {
      String text = s.toString();
      int length = text.length();

      if(length > 0 amp;amp; !Pattern.matches(YOUR_REGEX, text)) {
           s.delete(length - 1, length);
      }
}
  

Ответ №2:

добавьте android:digits в свой xml, поместите свои символы вместо abcd

 <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="text"
        android:digits="abcd" />
  

Комментарии:

1. мое приложение двуязычное, оно также преобразует на арабском языке, поэтому, если я добавлю что-либо в android: digits, оно не будет использовать арабские символы с клавиатуры. в мое регулярное выражение я добавил арабский

2. Вы можете получить его из файла ресурсов string для арабского языка