android - 防止 EditText 使用特殊字符
问题描述
我有一个需要一些用户输入的edittext 我有一个允许 az AZ 0-9 @-_ 的正则表达式 我想阻止用户输入除此正则表达式之外的任何其他字符。目前,如果用户输入除此正则表达式之外的字符,则我的代码工作正常,edittext 显示错误,但我希望该用户不应键入除此正则表达式之外的其他字符。
这是我检查正则表达式的代码。
editTextUsername.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
ims = imm.getCurrentInputMethodSubtype();
String localeKeyboard = ims.getLocale();
if(localeKeyboard.equalsIgnoreCase(LocaleManager.LANGUAGE_ARABIC)){
editTextUsername.setError(null);
}
else{
if(UtilHelper.isValidNameSubject(editTextUsername.getText().toString())){
editTextUsername.setError(null);
}
else{
editTextUsername.setError(getString(R.string.txt_invalid_name));
}
}
}
});
这是我的正则表达式,
"^[a-zA-Z0-9ء-ي@_ -]*$"
解决方案
你可以在你的TextWatcher
@Override
public void afterTextChanged(Editable s) {
String text = s.toString();
int length = text.length();
if(length > 0 && !Pattern.matches(YOUR_REGEX, text)) {
s.delete(length - 1, length);
}
}