EditText限制输入长度和特殊字符

时间:2022-12-19 17:46:17

EditText限制输入长度和特殊字符

在一般的APP中都会有编辑个人信息的功能,比如编辑昵称之类的。但是EditText在输入文本信息的时候,比如输入换行或空格,那还是比较讨厌的,同时我们也不应该让用户无限制的输入,所以对输入信息的限制也是有必要的。

看下面代码:

MainActivity

public class MainActivity extends AppCompatActivity {

private static final int MAX_LENGTH = 15;
private EditText editText;

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

private void initView() {
editText = (EditText) findViewById(R.id.edit);
}

private void initListener() {

editText.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) {
//获取输入框中的数据
String edit = editText.getText().toString();
//获取过滤特殊字符后的数据
String stringFilter = stringFilter(edit);
if (!edit.equals(stringFilter)) {
//如果2者不等,将匹配后的数据设置给EditText显示
editText.setText(stringFilter);
}
//将光标设置到EditText最后的位置
editText.setSelection(editText.length());
}

@Override
public void afterTextChanged(Editable s) {
//如果EditText中的数据不为空,且长度大于指定的最大长度
if (!TextUtils.isEmpty(s) && s.length() > MAX_LENGTH) {
//删除指定长度之后的数据
s.delete(MAX_LENGTH, editText.getSelectionEnd());
Toast.makeText(MainActivity.this, "超出指定长度", Toast.LENGTH_SHORT).show();
}
}
});
}
/***
* 匹配特殊字符,将其过滤
* @param edit
* @return
*/

public String stringFilter(String edit) {
String regEx = "[/\\:*?<>|\"\n\t]";//这里可以添加需要的匹配符号
Pattern pattern = Pattern.compile(regEx);
Matcher matcher = pattern.matcher(edit);
return matcher.replaceAll("");
}

}

效果图:

EditText限制输入长度和特殊字符