当我输入Special charecters时如何验证EditText

时间:2015-05-04 11:08:11

标签: android

我有三个编辑文本。 第一个EditText名称没有特殊字符。当我输入任何特殊字符。我想显示错误不输入任何特殊字符。 当我离开第二个编辑文本时,我的光标在第三个编辑文本中。我想显示一个红色边框编辑文本。

4 个答案:

答案 0 :(得分:1)

android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"

在xml文件的edittext中使用上面的行,这样它只输入字母和数字

在edittext中添加textwatcher

yourEditText.addTextChangedListener(new TextWatcher() {

          public void afterTextChanged(Editable s) {

           // Here you need to check special character, if found then show error message

          if (s.toString().contains("%"))
          {
               // Display error message
          }

          public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

          public void onTextChanged(CharSequence s, int start, int before, int count) {}
       });

答案 1 :(得分:0)

将TextWatcher添加到EditText并应用识别特殊字符的条件(输入时),然后您可以在条件中设置

editText.setError("You cannot use Special Characters");

答案 2 :(得分:0)

您应该使用正则表达式来检查输入。这个link提供了文档并描述了您可能使用的模式。

对于您的情况,如果您只想使用文字字符:

public boolean isValid(String editTextInput){
     boolean isInputValid = false;

     String expression = "^[a-zA-Z]";
     CharSequence inputStr = editTextInput;

     Pattern pattern = Pattern.compile(expression, Pattern.CASE_INSENSITIVE);
     Matcher matcher = pattern.matcher(inputStr);
     if (matcher.matches()) {
          isInputValid = true;
     }
     return isInputValid ;
}

您可以立即使用此方法。当您需要检查输入时,只需输入以下代码:

if(isValid(editText.getText().toString().trim()){
    //valid
}else{
    editText.setError("Can contain only text");
    editText.setText("");
}

如果您想在用户进行新输入时立即查看,那么您必须实施interface TextWatcher并将其设置为EditText。例如:

editText.addTextChangedListener(this);

@Override
public void beforeTextChanged(CharSequence s, int i, int i2, int count){}
@Override
public void onTextChanged(CharSequence s, int i, int i2, int count) {}
@Override
public void afterTextChanged(Editable editable) {
    if(isValid(editText.getText().toString().trim()){
        //valid
    }else{
        editText.setError("Only alphabet characters allowed");
        editText.setText("");
    }
}

同样很好的教程可以找到here

答案 3 :(得分:0)

以下是一个示例,说明如何验证用户输入的EditText并相应地更新视图边框。

首先,将TextWater实现并附加到EditView,如下所示:

活动代码:

public class MainActivity extends ActionBarActivity {

EditText editText;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    editText = (EditText) findViewById(R.id.edittext);

    // Attach TextWatcher
    editText.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) {

        }

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) {

        }

        @Override
        public void afterTextChanged(Editable editable) {

            // A-Z, a-z, space
            String pattern = "^([a-zA-Z ]*)$";

            // Check for pattern match
            if (!editable.toString().matches(pattern)) {

                // Set red border 
                editText.setBackgroundResource(R.drawable.red_border);
            } else {

                // Restore default border
                editText.setBackgroundResource(R.drawable.grey_border);
            }
        }
    });
}
}

两个可绘制文件,用于在EditText周围绘制边框

/res/drawable/grey_border.xml

<?xml version="1.0" encoding="utf-8"?>
<shape
    android:shape="rectangle"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#FFFFFF"/>
    <stroke
        android:width="2dp"
        android:color="#000000"/>
</shape>

/res/drawable/grey_border.xml

<?xml version="1.0" encoding="utf-8"?>
<shape
    android:shape="rectangle"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#FFFFFF"/>
    <stroke
        android:width="2dp"
        android:color="#ff0000"/>
</shape>

最后是布局文件:

/res/layout/activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

<EditText
    android:padding="10dp"
    android:layout_margin="10dp"
    android:background="@drawable/grey_border"
    android:id="@+id/edittext"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>
</RelativeLayout>