Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java EditText验证未按预期工作_Java_Android_Android Edittext - Fatal编程技术网

Java EditText验证未按预期工作

Java EditText验证未按预期工作,java,android,android-edittext,Java,Android,Android Edittext,我已经开发了android应用程序,在那里我对EditText字段进行了前端验证,它只接受3个字母和4个数字。 它在登台环境中进行了测试,前端验证工作正常,我们没有后端验证。但过了一段时间,当我们检查 在我们的实时数据库上。我们发现一些数据只有与上述字段相关的数字。似乎在某些设备上验证不会起作用 我们收到的数据只有数字。我们收到无效数据的原因可能是什么 // Check for id is valid format like "ABC1234". String alphaLen = ge

我已经开发了android应用程序,在那里我对EditText字段进行了前端验证,它只接受3个字母和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;
}

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

android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
现在,对于3个字符和4个数字的格式,我们创建一个正则表达式。您可以创建自己的正则表达式并从中进行测试。我从此网站创建此正则表达式:

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

现在只需匹配此模式

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

显示您的代码。您始终需要验证客户端和服务器端。在最坏的情况下,一些恶意用户已经侵入了你的应用程序。最好的情况是,有一些用例可以绕过你的Android验证。请包括一个。添加的验证logic@abc123先生,看我的答案,我在我的工作室里测试过这个,它非常有效。我希望这能解决你的问题。
if (NAME_PATTERN.matcher(edtText.getText().toString().trim()).matches())
{
   // Write your logic if pattern match
}
else
{
   // Write your logic if pattern not match
}