android inputfilter 如何限制EditText只接受字母数字字符



edittext digits (8)

如何限制EditText只接受字母数字字符,而EditText中的小写和大写字符都显示为大写?

<EditText
    android:id="@+id/userInput"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:inputType="textMultiLine"
    android:minLines="3" >

    <requestFocus />
</EditText>

如果用户输入小写的“abcd”,则EditText应自动显示大写“ABCD”,而不需要将键盘限制为大写。


Answer #1

以编程方式,执行此操作:

mEditText.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
mEditText.setFilters(new InputFilter[] {
    new InputFilter() {   
        @Override  
        public CharSequence filter(CharSequence input, int start, int end, Spanned dst, int dstart, int dend) { 
            if (input.length() > 0 && !Character.isLetterOrDigit(input.charAt(0))) {  
                // if not alphanumeric, disregard the latest input
                // by returning an empty string 
                return ""; 
            }
            return null;
        }  
    }, new InputFilter.AllCaps()
});

请注意,调用setInputType是必要的,这样我们就可以确保input变量始终是用户给出的最后一个字符。

我在SO中尝试了其他解决方案。 但是在许多情况下,他们中的许多人都表现得很奇怪,例如当你有快速周期(Tap space bar twice for period followed by space)设置时。 使用此设置,它会从输入文本中删除一个字符。 此代码也解决了这个问题。


Answer #2

用这个:

android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
android:inputType="textCapCharacters"

我尝试使用textAllCaps="true" ,如此问题的已接受答案的评论中所建议,但它没有按预期工作。


Answer #3

如果你不想要太多的自定义,一个简单的技巧实际上来自上面的一个,你要在android:digits中添加所有字符

android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"

这应该可以接受带有大写字母和小写字母的字母数字值。


Answer #4

您不想为此编写任何正则表达式,只需将XML属性添加到“编辑”文本即可

android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
android:inputType="textCapCharacters"

经过测试,完美适用于PAN卡验证。


Answer #5

一行答案

XML添加此文章AllCaps =“true”

在onCreate()上执行此操作

用于小写和大写,允许空间

yourEditText.setKeyListener(DigitsKeyListener.getInstance("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890 "));

适用于允许空间的小写 (此问题的必填答案)

yourEditText.setKeyListener(DigitsKeyListener.getInstance("abcdefghijklmnopqrstuvwxyz1234567890 "));

适用于允许空间的大写字母

yourEditText.setKeyListener(DigitsKeyListener.getInstance("ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 "));

Answer #6

尝试这个:

private void addFilterToUserName()
    {

        sign_up_display_name_et.setFilters(new InputFilter[] {
                new InputFilter() {
                    public CharSequence filter(CharSequence src, int start,
                                               int end, Spanned dst, int dstart, int dend) {
                        if(src.equals("")){ // for backspace
                            return src;
                        }
                        if(src.toString().matches("[a-zA-Z 0-9]+")){
                            return src;
                        }
                        return "";
                    }
                }
        });
    }

Answer #7

为此,您需要创建自定义过滤器并像这样设置为EditText。

这会自动将您的字母转换为大写。

EditText editText = (EditText)findViewById(R.id.userInput);
InputFilter myFilter = new InputFilter() {

    @Override
    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
        try {
            Character c = source.charAt(0);
            if (Character.isLetter(c) || Character.isDigit(c)) {
                return "" + Character.toUpperCase(c);
            } else {
                return "";
            }
        } catch (Exception e) {
        }
        return null;
    }
};
editText.setFilters(new InputFilter[] { myFilter });

没有在xml文件中设置的其他参数。


Answer #8

这对我有用:

android:inputType="textVisiblePassword"





android-edittext