简单的正则表达式无法验证数字

时间:2017-03-27 18:18:15

标签: android regex

我试图验证我的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上看过另一篇帖子。

2 个答案:

答案 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");
 } 

希望它有所帮助。