【问题标题】:Android Password Validation安卓密码验证
【发布时间】:2015-03-23 12:37:48
【问题描述】:

我正在开发一个 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("!@#$*()?,.");
    }

【问题讨论】:

    标签: java android regex


    【解决方案1】:

    您的正则表达式不适用于您尝试执行的操作。首先我会指出问题,然后在下面我会告诉你你应该做什么:

    "^[a-zA-Z0-9]*$"
    

    上面的正则表达式会查找整个字符串,其中只有字母(大写和小写)a-z 存在和/或数字存在。因为您使用的是开始和结束锚点(^ - 开始锚点,$ - 结束锚点),所以您说整个密码必须只包含这些值。由于这些锚点,子字符串不会被视为匹配项。

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

    * 字符保留用于前一个字符 (#) 的零次或多次出现。字符 ? 被保留以表示零或前面的字符之一,因此您正在检查 ) 可能存在也可能不存在。然后 .字符表示任何字符。如果您确实想要这个确切的表达式,则需要将其转义:

    "!@#$\*()\?,\."
    

    但是,这仍然不能解决您的问题,因为它会按照那个顺序匹配那组字符。

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

    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;
    }
    

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

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

    【讨论】:

      猜你喜欢
      • 2014-03-09
      • 2013-12-20
      • 2015-10-08
      • 1970-01-01
      • 1970-01-01
      • 2016-10-17
      • 2016-02-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多