首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >验证只允许在android中编辑文本中的数字和字符

验证只允许在android中编辑文本中的数字和字符
EN

Stack Overflow用户
提问于 2013-01-07 16:22:36
回答 7查看 75.8K关注 0票数 32

在我的应用程序中,我必须验证EditText。它应该只允许字符、数字、下划线和连字符。

下面是我的代码:

代码语言:javascript
复制
edittext.addTextChangedListener(new TextWatcher() {
                                        
    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        // TODO Auto-generated method stub                              
    }
                                        
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        // TODO Auto-generated method stub
    }
                                        
    @Override
    public void afterTextChanged(Editable s) {
        // validation codes here
                                
        location_name=s.toString();
        Toast.makeText(getApplicationContext(),location_name, Toast.LENGTH_SHORT).show();                
        
        if (location_name.matches(".*[^a-z^0-9].*")) {
            location_name = location_name.replaceAll("[^a-z^0-9]", "");
            s.append(location_name);
            s.clear();
            Toast.makeText(getApplicationContext(),"Only lowercase letters and numbers are allowed!",Toast.LENGTH_SHORT).show();
        }                                   
    }

});     
                                    
location.add(location_name);

当我在EditText中输入输入时,应用程序被强制关闭。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2013-01-07 16:26:06

Android中有一些非常简单的东西,而不是使用你的“手动”检查方法:

代码语言:javascript
复制
InputFilter filter = new InputFilter() { 
    public CharSequence filter(CharSequence source, int start,
                               int end, Spanned dest, int dstart, int dend) { 

        for (int i = start;i < end;i++) { 
            if (!Character.isLetterOrDigit(source.charAt(i)) && 
                !Character.toString(source.charAt(i)).equals("_") && 
                !Character.toString(source.charAt(i)).equals("-")) 
            { 
                return ""; 
            } 
        } 
        return null; 
    } 
}; 

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

或者另一种方法:在要创建EditText的XML中设置允许的字符:

代码语言:javascript
复制
<EditText 
  android:inputType="text" 
  android:digits="0,1,2,3,4,5,6,7,8,9,*,qwertzuiopasdfghjklyxcvbnm,_,-" 
  android:hint="Only letters, digits, _ and - allowed" />
票数 76
EN

Stack Overflow用户

发布于 2013-12-17 17:02:42

代码语言:javascript
复制
<EditText 
  android:inputType="text" 
  android:digits="0,1,2,3,4,5,6,7,8,9,*,qwertzuiopasdfghjklyxcvbnm,_,-" 
  android:hint="Only letters, digits, _ and - allowed"
/>

为了避免,使用以下代码,上述代码还将额外包含,

代码语言:javascript
复制
<EditText 
  android:inputType="text" 
  android:digits="0123456789qwertzuiopasdfghjklyxcvbnm_-"
  android:hint="Only letters, digits, _ and - allowed"
/>
票数 19
EN

Stack Overflow用户

发布于 2016-09-03 03:05:31

这可能很有用,特别是如果您的EditText应该允许diacritics (在我的例子中是Portuguese Diacritic):

代码语言:javascript
复制
<EditText
   android:digits="0123456789AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZzÁáÂâÃãÀàÇçÉéÊêÍíÓóÔôÕõÚú"
/>
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14192199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档