Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.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 Android密码验证_Java_Android_Regex - Fatal编程技术网

Java Android密码验证

Java Android密码验证,java,android,regex,Java,Android,Regex,我正在开发一个Android应用程序,其中我必须验证密码。下面是我用于验证的代码行,但我无法获得所需的验证 我的要求是:一个字符串需要被解析,这样它至少需要一个特殊字符、一个数字和A-Z、A-Z中的任何字母。。请帮助我获得所需的输出 public static boolean isAlphaNumericPwd(String name) { return name.matches("^[a-zA-Z0-9]*$"); } public static boolea

我正在开发一个Android应用程序,其中我必须验证密码。下面是我用于验证的代码行,但我无法获得所需的验证

我的要求是:一个字符串需要被解析,这样它至少需要一个特殊字符、一个数字和A-Z、A-Z中的任何字母。。请帮助我获得所需的输出

public static boolean isAlphaNumericPwd(String name) {
        return name.matches("^[a-zA-Z0-9]*$");
    }

    public static boolean isSpecialPwd(String name) {
        return name.matches("!@#$*()?,.");
    }

您的正则表达式对于您尝试执行的操作无效。首先我将指出问题,然后在下面我将向您展示您应该做什么:

"^[a-zA-Z0-9]*$"
上面的正则表达式查找一个只有字母(大写和小写)a-z和/或数字存在的整个字符串。因为您使用的是开始和结束锚(^-start-anchor,$-end-anchor),所以您的意思是整个密码必须只包含这些值。由于这些锚,子字符串将不被视为匹配

用于检查特殊字符的正则表达式也不起作用,因为您没有转义保留的正则表达式字符,即使是这样,也只会查找模式
@#*()?,.
在子字符串中按该顺序排列

*字符保留为上一个字符(#)的零次或多次出现。字符
被保留为表示零或前一个字符之一,因此您正在检查该字符是否存在。然后。字符是指任何字符。如果您确实想要这个精确的表达式,您需要将其转义为:

"!@#$\*()\?,\."
然而,这仍然不能解决您的问题,因为它将按照这个顺序匹配这组字符

听起来您只是想检查是否有字母、至少一个数字和至少一个特殊字符。在这种情况下,您不能只使用一个正则表达式…这是如果您想使用正则表达式

public static boolean validatePassword(String pswd) {
    //check that there are letters
    if(!pswd.matches("[a-zA-Z]+"))
        return false;  //nope no letters, stop checking and fail!            
    //check if there are any numbers
    if(!pswd.matches("[0-9]+"))
        return false;  //nope no numbers, stop checking and fail!
    //check any valid special characters
    if(!pswd.matches("[.!#*()?,]+"))
        return false;  //nope no special chars, fail!

    //everything has passed so far, lets return valid
    return true;
}
请注意,在我的示例中,每个表达式都不包含任何锚。这是因为我们不关心字符在字符串中的位置,只关心它们的存在。我也没有使用
*
,因为这可能意味着零,而是使用
+
字符,因为这意味着至少一次。最后请注意,所有这些都放在括号中,这意味着它们是字符类,因此我们需要一个与这些值中的任何一个匹配的字符。
+
然后作为一个整体作用于字符类,而不是单个字符。此外,在字符类中,您不需要转义(大多数)保留字符,因为它们在该构造中具有不同(或没有)的含义


尽管如此,请注意这些都不是很好的密码要求,但这至少应该为您指明如何使用此验证方法的正确方向。

您的正则表达式对于您尝试执行的操作不起作用。首先我将指出问题,然后在下面我将向您展示您应该做什么:

"^[a-zA-Z0-9]*$"
上面的正则表达式查找一个只有字母(大写和小写)a-z和/或数字存在的整个字符串。因为您使用的是开始和结束锚(^-start-anchor,$-end-anchor),所以您的意思是整个密码必须只包含这些值。由于这些锚,子字符串将不被视为匹配

用于检查特殊字符的正则表达式也不起作用,因为您没有转义保留的正则表达式字符,即使是这样,也只会查找模式
@#*()?,.
在子字符串中按该顺序排列

*字符保留为上一个字符(#)的零次或多次出现。字符
被保留为表示零或前一个字符之一,因此您正在检查该字符是否存在。然后。字符是指任何字符。如果您确实想要这个精确的表达式,您需要将其转义为:

"!@#$\*()\?,\."
然而,这仍然不能解决您的问题,因为它将按照这个顺序匹配这组字符

听起来您只是想检查是否有字母、至少一个数字和至少一个特殊字符。在这种情况下,您不能只使用一个正则表达式…这是如果您想使用正则表达式

public static boolean validatePassword(String pswd) {
    //check that there are letters
    if(!pswd.matches("[a-zA-Z]+"))
        return false;  //nope no letters, stop checking and fail!            
    //check if there are any numbers
    if(!pswd.matches("[0-9]+"))
        return false;  //nope no numbers, stop checking and fail!
    //check any valid special characters
    if(!pswd.matches("[.!#*()?,]+"))
        return false;  //nope no special chars, fail!

    //everything has passed so far, lets return valid
    return true;
}
请注意,在我的示例中,每个表达式都不包含任何锚。这是因为我们不关心字符在字符串中的位置,只关心它们的存在。我也没有使用
*
,因为这可能意味着零,而是使用
+
字符,因为这意味着至少一次。最后请注意,所有这些都放在括号中,这意味着它们是字符类,因此我们需要一个与这些值中的任何一个匹配的字符。
+
然后作为一个整体作用于字符类,而不是单个字符。此外,在字符类中,您不需要转义(大多数)保留字符,因为它们在该构造中具有不同(或没有)的含义

尽管如此,请注意这些都不是好的密码要求,但这至少应该为您指明了正确的方向,说明如何使用这种验证方法