use*_*001 61 validation android android-edittext
如何限制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>
Run Code Online (Sandbox Code Playgroud)
如果用户键入小写的"abcd",EditText则应自动显示大写"ABCD"而无需将键盘限制为大写.
Has*_*ikh 119
在XML中,添加以下内容:
android:digits="abcdefghijklmnopqrstuvwxyz1234567890 "
Run Code Online (Sandbox Code Playgroud)
Ste*_*yle 24
如何限制EditText只接受字母数字字符,以便用户输入的小写或大写键,EditText将显示大写
该InputFilter解决方案效果很好,并且可以完全控制以比更精细的粒度过滤掉输入android:digits.如果所有字符都有效,则该filter()方法应返回; 如果某些字符无效null,则该方法应返回CharSequence有效字符.如果复制并粘贴了多个字符,而某些字符无效,则只保留有效字符.
public static class AlphaNumericInputFilter implements InputFilter {
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
// Only keep characters that are alphanumeric
StringBuilder builder = new StringBuilder();
for (int i = start; i < end; i++) {
char c = source.charAt(i);
if (Character.isLetterOrDigit(c)) {
builder.append(c);
}
}
// If all characters are valid, return null, otherwise only return the filtered characters
boolean allCharactersValid = (builder.length() == end - start);
return allCharactersValid ? null : builder.toString();
}
}
Run Code Online (Sandbox Code Playgroud)
此外,在设置时InputFilter,您必须确保不要覆盖InputFilters您的其他设置EditText; 这些可以用XML设置,比如android:maxLength.您还必须考虑设置的顺序InputFilters,它们按该顺序应用.幸运的是,InputFilter.AllCaps已经存在,因此使用我们的字母数字过滤器将保留所有字母数字文本,并将其转换为大写.
// Apply the filters to control the input (alphanumeric)
ArrayList<InputFilter> curInputFilters = new ArrayList<InputFilter>(Arrays.asList(editText.getFilters()));
curInputFilters.add(0, new AlphaNumericInputFilter());
curInputFilters.add(1, new InputFilter.AllCaps());
InputFilter[] newInputFilters = curInputFilters.toArray(new InputFilter[curInputFilters.size()]);
editText.setFilters(newInputFilters);
Run Code Online (Sandbox Code Playgroud)
Aje*_*ngh 13
如果你不想要太多的自定义,一个简单的技巧实际上来自上面的一个,你要在android:digits中添加所有字符
android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
Run Code Online (Sandbox Code Playgroud)
这应该可以接受带有大写字母和小写字母的字母数字值.
用这个:
android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
android:inputType="textCapCharacters"
Run Code Online (Sandbox Code Playgroud)
我尝试textAllCaps="true"按照对此问题的已接受答案的评论中的建议使用,但它没有按预期工作.
尝试这个:
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 "";
}
}
});
}
Run Code Online (Sandbox Code Playgroud)
您不想为此编写任何正则表达式,只需将XML属性添加到“编辑”文本中
android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
android:inputType="textCapCharacters"
Run Code Online (Sandbox Code Playgroud)
经过测试,可以完美地用于PAN卡验证。
极简 Kotlin 方法:
fun EditText.allowOnlyAlphaNumericCharacters() {
filters = filters.plus(
listOf(
InputFilter { s, _, _, _, _, _->
s.replace(Regex("[^A-Za-z0-9]"), "")
},
InputFilter.AllCaps()
)
)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
65141 次 |
| 最近记录: |