阻止editText中的某些标点符号?

时间:2014-02-18 17:48:19

标签: android regex android-edittext punctuation

我想阻止用户在editText框内写一些标点符号。例如,如果他们使用'!'要么 ';'当他们点击完成按钮时,他们会收到一个警告提醒他们不要使用它,但是如果他们使用其他标点符号,如逗号或句号,那就没关系。

这里的大多数代码都是如何交换或删除,但我并没有真正看到用于检测的代码...如何创建代码以在editText框中检测这些特定的标点符号?

提前致谢!

5 个答案:

答案 0 :(得分:1)

if(yourText.matches("[^;]+[^!]")){
    //Show the toast here
}

if(yourText.indexOf("!") != -1 || yourText.indexOf(";") != -1){
    //Show the toast here
}

作为参考,我创建了这个JSFiddle,但这是javascript。

答案 1 :(得分:1)

一个简单的解决方案是在布局xml文件中将android:digits属性添加到<EditText>,添加所有允许的字符,如。

 android:digits="ABCDE....Zabcde.....z012345789#$%^&*" 

Android会阻止输入android:digits中未列出的任何字符。

上面提到的其他解决方案更优雅,但您需要为所有这些解决方案使用正则表达式。

答案 2 :(得分:0)

你应该使用inputFilter

 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))) { 
                            return ""; 
                    } 
            } 
            return null; 
    } 
 }; 

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

找到了这段代码..

答案 3 :(得分:0)

您可以使用TextWatcher,以下是一个使用示例:

mEditText.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) {

                // TODO Auto-generated method stub
            }
        });

答案 4 :(得分:0)

在您的情况下,InputFilter是一个更好的解决方案,因为您可以一次编写所有限制并在多个地方使用它,任意数量的EditTexts。

请参阅以下内容:

 InputFilter[] filters = new InputFilter[1];
 filters[0] = new InputFilter(){
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
    if (end > start) {

        char[] acceptedChars = new char[]{'!',';'};

        for (int index = start; index < end; index++) {                                         
            if (new String(acceptedChars).contains(String.valueOf(source.charAt(index)))) { 
                //Do your thing; 
            }               
        }
    }
    return null;
}

};
searchEdit.setFilters(filters);

来源: How to restrict Edittext to some particular characters in android?