我有一个接受数字输入的EditText,如果用户在该EditText中输入了错误的数字,则我拥有该数字的正则表达式,错误出现在EditText下方,但是我想检查该EditText中的每个键入的数字,例如用户键入了不在正则表达式中的错误数字,将会出现错误;如果他删除该数字并输入正确的数字,则错误应该消失;对于我而言,在他输入所有剩余数字之后,错误就会消失。我想对每个键入的数字应用验证,以使错误出现和消失。
这是我的代码。
@Override
public void afterTextChanged(Editable s) {
if (s.length() <= 12) {
if (editMobileNumber.getText().toString() != null) {
if (focus) {
if (!s.toString().startsWith("971")) {
editMobileNumber.setText("971");
Selection.setSelection(editMobileNumber.getText(), editMobileNumber.getText().length());
} else {
tvMobileNumber.setVisibility(View.GONE);
}
}
if (editMobileNumber.getText().toString().length() <= 12) {
if (s.length() > 3) {
if (UtilHelper.isValidUAENumber(editMobileNumber.getText().toString())) {
tvMobileNumber.setVisibility(View.GONE);
} else {
if(editMobileNumber.getText().toString().length() <= 12){
tvMobileNumber.setText(getResources().getString(R.string.txt_number_should_be));
tvMobileNumber.setVisibility(View.VISIBLE);
}
}
} else {
tvMobileNumber.setVisibility(View.GONE);
}
}
}
} else {
String text = editMobileNumber.getText().toString();
editMobileNumber.setText(text.substring(0, text.length() - 1));
editMobileNumber.setSelection(editMobileNumber.getText().length());
}
}
答案 0 :(得分:1)
P,这里有很多东西在进行。
首先,在用户输入一些文本或您的案例编号后,将调用afterTextChanged
。
在else
情况下,您需要再次更改文本。
String text = editMobileNumber.getText().toString();
editMobileNumber.setText(text.substring(0, text.length() - 1));
您为什么要这样做?没必要吧?
接下来,只有长度小于等于12个字符时,您才比较输入内容
if (s.length() <= 12)
但是,如果我说对了,我想每次都这样做,对吗?即使您输入的数字例如是14个字符,对吗?然后,您应该先更改它。
您还应该考虑将editMobileNumber.getText().toString()
排除在自己的变量之外,以使您的代码更具可读性。
接下来的事情是,如果长度至少为4个字符,则仅使用UtilHelper.isValidUAENumber
验证输入。
if (s.length() > 3) {
我认为这也不是您所期望的。
同样,这里有很多事情。可能您应该再次检查整个逻辑并尝试理解每个步骤。尝试先减少逻辑,然后逐步改进代码。