15

我必须在 EditText 中设置可接受的字符“0123456789”和“分号”。下面是我正在使用的代码。

android:digits="0123456789;"
android:inputType="number|text

该实现的问题是在 HTC 手机中,无法输入分号,但在三星和索尼爱立信中,可以输入分号。另一个问题是我在三星和索尼爱立信输入分号时,分号无法删除。上面的代码中是否缺少任何属性?提前致谢。

4

4 回答 4

28

Android 通过修改布局 xml 并添加 android:inputType="text" 提供了一种编辑文本字段的简单方法。这使您可以轻松创建一些基本验证,例如数字、小数、电话或电子邮件。但是字母数字没有参数(即没有特殊字符)。为此,您需要使用如下所示的输入过滤器,并在代码中使用该过滤器设置要验证的字段。这个输入过滤器

 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 ""; 
             }   //the first editor deleted this bracket when it is definitely necessary...
         }
         return null;
     }  
 };   
 mFirstName.setFilters(new InputFilter[]{ alphaNumericFilter});   
于 2012-04-27T04:50:28.510 回答
1

要限制用户在键入时可以输入的内容,请使用 TextWatcher,在这个问题Android: How can I validate EditText input?中讨论过。

更好的是:在 EditText 中只允许基于正则表达式的选定字符

于 2012-04-27T03:58:29.737 回答
1

解决方案是修改这些字段: http: //developer.android.com/reference/android/widget/TextView.html#attr_android :inputMethod

设置 EditText 的 InputMethod 以便您可以正确获取所需的内容。

于 2012-04-27T04:17:02.700 回答
0

这是正则表达式

Pattern mPattern = Pattern.compile("^([1-9][0-9]{0,2})?(\\.[0-9]?)?$");
Matcher matcher = mPattern.matcher(loginNameString.toString());               
if(!matcher.find())
{
    //TODO
}
于 2015-03-15T11:25:46.317 回答