我试图验证我的EditText是否只包含数字,如果里面包含特定长度的数字。
我使用的是一个简单的正则表达式:/^([0-9]{11})$/
更新:插入一些代码:
private boolean validateData( String dataToValidate, String dataPattern ){
Pattern pattern = Pattern.compile( dataPattern );
return pattern.matcher( dataToValidate ).matches();
}
validateData(data, "/^[0-9]{11}$/")
我的EditText设置为只接收11个数字。是的,我在SO上看过另一篇帖子。
答案 0 :(得分:0)
您有两种类别验证。
EditText只包含数字
使用:android:inputType="numberSigned"
<EditText
android:id="@+id/etNumber"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="Number"
android:imeOptions="actionDone"
android:inputType="numberSigned"
android:singleLine="true"
android:textColor="@color/black" />
只收到11个号码
现在长度使用:
if (etNumber.getText().toString().trim().length() != 11) {
Toast.makeText(getApplicationContext(), "Invalid Number", Toast.LENGTH_SHORT).show();
etNumber.requestFocus();
}
如果你想使用Regex(第二个选项)
你可以使用:
String regexStr = "^[0-9]*$";
if (!(etNumber.getText().toString().trim().matches(regexStr))) {
Toast.makeText(getApplicationContext(), "Invalid Number", Toast.LENGTH_SHORT).show();
}
答案 1 :(得分:0)
如果您希望编辑文本只接收数字,则只需设置
android:inputType="number"
xml中的
要设置输入最大长度,只需添加:
android:maxLength="11"
在xml中。
如果您想检查输入的文本长度是否为11,请执行以下代码:
myEditText.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {}
@Override
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start,
int before, int count) {
if(s.length() < 11)
//your code;
}else{
//your code;
}
});
如果您想进行正则表达式匹配,请执行以下操作:
String pattern = "[0-9]{11}";
String testString = "12345678912";
if(testString.matches(pattern)){
Log.i("TAG", "Matches");
}else{
Log.i("TAG", "No Match");
}
希望它有所帮助。