gpt4 book ai didi

java - 安卓密码验证

转载 作者:行者123 更新时间:2023-11-29 07:41:55 25 4
gpt4 key购买 nike

我正在开发一个 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 和/或数字。因为您使用的是开始和结束 anchor (^ - 开始 anchor ,$ - 结束 anchor ),所以您是说整个密码必须仅包含这些值。由于这些 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;
}

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

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

关于java - 安卓密码验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29210404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com