java - 如何向 EditTex 添加过滤器?
问题描述
创建类 InputFilterMix 以添加我想拒绝的特殊字符
public class InputFilterMix implements InputFilter {
@Override
public CharSequence filter(CharSequence charSequence, int i, int i1, Spanned spanned, int i2, int i3) {
if (isCharacter(charSequence.toString())) {
return "";
} else if (charSequence.toString().matches("\\d*")) {
return "";
}
return charSequence.toString();
}
private boolean isCharacter(String s) {
return s.matches("[^a-zA-Z0-9-' '-\u0621-\u064A]");
}
}
然后我将此添加到 myActivity 以实现 InputFilterMix
public class myActivity extends AppCompatActivity {
private EditText name;
InputFilterMix inputFilterMix = new InputFilterMix();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
name = (EditText) findViewById(R.id.phone_number);
name.setFilters(new InputFilter[]{inputFilterMix});
}
}
解决方案
您的匹配测试是在要替换的字符串上完成的,但您想检查替换文本。
试试这个代码:
public class InputFilterMix implements InputFilter {
@Override
public CharSequence filter(CharSequence charSequence, int i, int i1, Spanned spanned, int i2, int i3) {
final CharSequence replacementText = charSequence.subSequence(i, i1);
final CharSequence replacedText = spanned.subSequence(i2, i3);
if (isCharacter(replacementText.toString())) {
return "";
} else if (replacementText.toString().matches("\\d*")) {
return "";
}
return replacedText.toString();
}
private boolean isCharacter(String s) {
return s.matches("[^a-zA-Z0-9-' '-\u0621-\u064A]");
}
}
推荐阅读
- python - 有没有办法优化这段代码以便运行得更快?
- python - Kivy:使用 kivy.clock 为计时器安排声音
- asp.net - 是否可以使用 dacpac 文件轻松地将数据从轻量级 SQL Server Express 迁移到 Azure?
- django-models - 如何检索当前用户对象并将其分配给 Wagtail admin 中的字段?
- python - 通过“page =”在url中途刮分页
- azure - IConfidentialClientApplication GetAccountsAsync 不返回任何内容
- c# - double.parse System.FormatException: '输入字符串的格式不正确。'
- c++ - C++ 静态成员变量 - 文件之间的访问
- python - 检查 Pandas 数据框中的哪些值不在 SQL 数据库中
- maven - maven-archetype-plugin 因 ClassNotFoundException 而失败