在我的应用程序中,我接受用户的密码,密码应采用以下格式: -
所以按照这里给出的教程: http://www.mkyong.com/regular-expressions/how-to-validate-password-with-regular-expression/ 我创建了自己的模式: -
private static final String PASSWORD_PATTERN = "($\\S*(?=\\S{6,})(?=\\S*[a-z])(?=\\S*[A-Z])(?=\\S*[\\d])(?=\\S*[\\W])\\S*$)";
但它无法正常工作。如果我按照模式输入正确的密码值,它仍然会向我显示错误。
请告诉我这里发生了什么;有什么错误?
这是我的代码: -
PWD_Validate = new PasswordValidator();
String password = TXT_PassWord.getText().toString();
if (PWD_Validate.validate(password))
{
}
else{ } it takes me every time in else block, even I entered a correct passwaord.
答案 0 :(得分:0)
我不确定你为什么偏离了你所链接的教程中列出的模式。你的模式以$
开头,它在字符串的末尾断言位置,所以你不太可能匹配任何东西。通常,如果您使用的是断言,则在模式的最后使用$
并使用^
来断言开头。
也没有你的模式中的任何一个你已经概述的特殊字符,因为你所说的是必需的。如果您计划匹配那些我建议将它们包含在您的模式中。
正则表达式的细分如下:
$
断言字符串末尾的位置(你在开头就知道了)。
\S*
匹配任何非空格字符[^\r\n\t\f ]
量词:在零和无限次之间,尽可能多次,根据需要回馈[贪心]
(?=\S{6,})
肯定前瞻 - 断言下面的正则表达式可以匹配
\S{6,}
匹配任何非空格字符[^\r\n\t\f ]
量词:在6到无限次之间,尽可能多次,根据需要回馈[贪心]
(?=\S*[a-z])
肯定前瞻 - 断言下面的正则表达式可以匹配
\S*
匹配任何非空格字符[^\r\n\t\f ]
量词:在零和无限次之间,尽可能多次,根据需要回馈[贪心]
[a-z]
匹配下面列表中的单个字符
a-z a和z之间范围内的单个字符(区分大小写)
(?=\S*[A-Z])
肯定前瞻 - 断言下面的正则表达式可以匹配
\S*
匹配任何非空格字符[^\r\n\t\f ]
量词:在零和无限次之间,尽可能多次,根据需要回馈[贪心]
[A-Z]
匹配下面列表中的单个字符
A-Z
A和Z之间范围内的单个字符(区分大小写)
(?=\S*[\d])
肯定前瞻 - 断言下面的正则表达式可以匹配
\S*
匹配任何非空格字符[^\r\n\t\f ]
量词:在零和无限次之间,尽可能多次,根据需要回馈[贪心]
[\d]
匹配下面列表中的单个字符
\ d匹配数字[0-9]
(?=\S*[\W])
肯定前瞻 - 断言下面的正则表达式可以匹配
\S*
匹配任何非空格字符[^\r\n\t\f ]
量词:在零和无限次之间,尽可能多次,根据需要回馈[贪心]
[\W]
匹配下面列表中的单个字符
\ W匹配任何非单词字符[^a-zA-Z0-9_]
\S*
匹配任何非空格字符[^\r\n\t\f ]
量词:在零和无限次之间,尽可能多次,根据需要回馈[贪心]
$
断言字符串末尾的位置
说实话,你的正则表达式与你的教程相差甚远 链接它甚至没有远程关闭。我建议你去 回来并彻底重新阅读和研究指南,因为它显而易见 没有以任何方式适用任何条款。