我想阻止用户在editText框内写一些标点符号。例如,如果他们使用'!'要么 ';'当他们点击完成按钮时,他们会收到一个警告提醒他们不要使用它,但是如果他们使用其他标点符号,如逗号或句号,那就没关系。
这里的大多数代码都是如何交换或删除,但我并没有真正看到用于检测的代码...如何创建代码以在editText框中检测这些特定的标点符号?
提前致谢!
答案 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?