EditText验证未按预期工作

时间:2017-07-13 05:27:44

标签: java android android-edittext

我开发了android应用程序,在那里我有一个EditText字段的前端验证,它只接受三个alpha和4位数。 它在临时环境中进行测试,前端验证工作正常(我们没有后端验证)。但经过一段时间我们检查 在我们的实时数据库中我们发现一些数据只有与上述字段相关的数字。似乎某种程度上验证不会起作用 我们收到的数据只有数字。是否可能或我们收到无效数据的原因是什么。

// Check for id is valid format like "ABC1234".
    String alphaLen = getResources().getString(R.string.rokaIdAlphaLen);
    String numLen = getResources().getString(R.string.rokaIdNumericLen);

    if (rokaId.length() > 0 && !Validate.validateRokaId(rokaId, alphaLen, numLen)) {
        etRokaid.setError(getString(R.string.error_incorrect_format));
        focusView = etRokaid;
        cancel = true;
    }

public static boolean validateRokaId(String params, String alphaLen, String numLen) {


    boolean success = false;
    int alphaLength = 0;
    int numericLength = 0;

    alphaLength = Integer.parseInt(alphaLen.trim());
    numericLength = Integer.parseInt(numLen.trim());

    if (params.length() == alphaLength + numericLength) {
        if (params.substring(0, alphaLength).matches("[a-zA-Z]*")) {
            if (params.substring(alphaLength, alphaLength+numericLength).matches("[0-9]*")) {
                success = true;
            } else {
                success = false;
            }
        } else {
            success = false;
        }
    } else {
        success = false;
    }



    return success;
}

1 个答案:

答案 0 :(得分:1)

首先,您需要在XML文件中设置编辑文本属性 android:digits 以获得更高的安全性,因此即使您签入了验证,用户也不会插入其他特殊字符。

android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"

现在,对于3个字符和4个数字的格式,我们创建一个Regex表达式。您可以创建自己的正则表达式并从this site进行测试。我从这个网站创建了这个正则表达式:

  

[A-Z] {3} \ d {4}

public final static Pattern NAME_PATTERN = Pattern.compile("^[A-Z]{3}[0-9]{4}$");

现在只需匹配此模式。

if (NAME_PATTERN.matcher(edtText.getText().toString().trim()).matches())
{
   // Write your logic if pattern match
}
else
{
   // Write your logic if pattern not match
}