首页 > 解决方案 > 防止 EditText 使用特殊字符

问题描述

我有一个需要一些用户输入的edittext 我有一个允许 az AZ 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ء-ي@_ -]*$"

标签: android

解决方案


你可以在你的TextWatcher

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

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

推荐阅读