密码验证器在android中不起作用

时间:2014-07-11 05:54:29

标签: android regex validation passwords

在我的应用程序中,我接受用户的密码,密码应采用以下格式: -

  • 区分大小写
  • 必须至少6个字符,
  • 至少包括
    • 一个字母(a-Z),
    • 一个数字(0-9)和
    • 以下特殊字符之一:!= + *;: - ,._ {[()]}#%?@

所以按照这里给出的教程: 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.

1 个答案:

答案 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 ] 量词:在零和无限次之间,尽可能多次,根据需要回馈[贪心]

$断言字符串末尾的位置

  

说实话,你的正则表达式与你的教程相差甚远   链接它甚至没有远程关闭。我建议你去   回来并彻底重新阅读和研究指南,因为它显而易见   没有以任何方式适用任何条款。