以编程方式限制特殊字符 & space

Restrict special characters & space programmatically

我想限制用户以编程方式输入特殊字符 & space。 下面是我的代码

InputFilter[] alphaNumericFilter = new InputFilter[2];
        alphaNumericFilter[0] = new InputFilter() {
            @Override
            public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
                for (int k = start; k < end; k++) {
                    boolean isLetterOrDigit = Character.isLetterOrDigit(source.charAt(k));
                    boolean isSpaceChar = Character.isSpaceChar(source.charAt(k));
                    if ((source.length() > 0 && isSpaceChar) ||
                            (!isLetterOrDigit && !isSpaceChar) ||
                            (isSpaceChar && TextUtils.isEmpty(dest))) {
                        return "";
                    }
                }
                return null;
            }
        };

按下 space 它会删除最后一个字符。

你可以这样做:

public static InputFilter getAlphaNumericInputFilter(){
        return new InputFilter() {
            @Override
            public CharSequence filter(CharSequence source, int start, int end,
                                       Spanned dest, int dstart, int dend) {

                if(source.equals("")){ // for backspace
                    return source;
                }
                if(source.toString().matches("[a-zA-Z0-9 ]+")){
                    return source;
                }
                return "";
            }
        };
    }

这里 如果您可以根据您的要求更改匹配字符串,例如。避免使用字母数字 space 那么它应该是这样的:[a-zA-Z0-9]+.

希望对你有帮助!

InputFilter alphaNumericFilter = new InputFilter() {   
     @Override  
     public CharSequence filter(CharSequence arg0, int arg1, int arg2, Spanned arg3, int arg4, int arg5)  
     {  
         for (int k = arg1; k < arg2; k++) {   
             if (!Character.isLetterOrDigit(arg0.charAt(k))) {   
             return ""; 
             }  
         }
         return null;
     }  
 };   
 mFirstName.setFilters(new InputFilter[]{ alphaNumericFilter});   

使用此代码过滤您的编辑文本

 private String yourCharacterThatYouWantToBlock= " ~#^|$%&*!";

        private InputFilter filter = new InputFilter() {

            @Override
            public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {

                if (source != null && yourCharacterThatYouWantToBlock.contains(("" + source))) {
                    return "";
                }
                return null;
            }
        };

Now apply this filter to your edittext.

 yourEditText.setFilters(new InputFilter[] { filter });

最后我通过在代码中添加以下行解决了这个问题

mEditText.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);

此行不会在键盘上显示建议。