【问题标题】:Password validator is not working in android密码验证器在android中不起作用
【发布时间】:2014-09-01 16:12:27
【问题描述】:

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

  • 区分大小写和
  • 长度必须至少为 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.

【问题讨论】:

  • 请发布您的代码
  • 嗨 Aniruddha,PasswordValidatorTest 类与链接上给出的相同,只需将 password_pattern 字符串替换为我上面给定的字符串。在我的活动中休息,我正在验证上面给出的按钮点击。我已经在上面发布了我的代码。
  • 我想知道您是如何从 edittext 获取值的。
  • 您好,我已经发布了代码,请检查
  • 你什么时候从edittext获取值?点击按钮?

标签: android regex validation passwords


【解决方案1】:

我不确定您为什么偏离了您链接的教程中列出的模式。您的模式以 $ 开头,它在字符串末尾断言位置,因此您不太可能匹配任何内容。通常,如果您使用断言,则在模式的最后使用$,并在开头使用^

您的模式中也没有任何您列出的特殊字符,因为您说这些字符是必需的。如果您打算匹配这些,我建议您将它们包含在您的模式中。

你的正则表达式的分解是这样的:

$ 断言字符串末尾的位置(你已经在开头得到了它)。

\S* 匹配任何非空白字符[^\r\n\t\f ] 量词:从零到无限次,尽可能多次,按需回馈[贪心]

(?=\S{6,}) Positive Lookahead - 断言下面的正则表达式可以匹配

\S{6,} 匹配任何非空白字符[^\r\n\t\f ] 量词:6次到无限次,尽可能多次,按需回馈[贪心]

(?=\S*[a-z]) Positive Lookahead - 断言下面的正则表达式可以匹配

\S* 匹配任何非空白字符[^\r\n\t\f ] 量词:从零到无限次,尽可能多次,按需回馈[贪心]

[a-z] 匹配下面列表中的单个字符 a-z 介于 a 和 z 之间的单个字符(区分大小写)

(?=\S*[A-Z]) Positive Lookahead - 断言下面的正则表达式可以匹配

\S* 匹配任何非空白字符[^\r\n\t\f ] 量词:从零到无限次,尽可能多次,按需回馈[贪心]

[A-Z] 匹配下面列表中的单个字符

A-Z A 和 Z 之间的单个字符(区分大小写)

(?=\S*[\d]) Positive Lookahead - 断言下面的正则表达式可以匹配

\S* 匹配任何非空白字符[^\r\n\t\f ] 量词:从零到无限次,尽可能多次,按需回馈[贪心]

[\d] 匹配下面列表中的单个字符 \d 匹配一个数字 [0-9]

(?=\S*[\W]) Positive Lookahead - 断言下面的正则表达式可以匹配

\S* 匹配任何非空白字符[^\r\n\t\f ] 量词:从零到无限次,尽可能多次,按需回馈[贪心]

[\W] 匹配下面列表中的单个字符 \W 匹配任何非单词字符[^a-zA-Z0-9_]

\S* 匹配任何非空白字符[^\r\n\t\f ] 量词:从零到无限次,尽可能多次,按需回馈[贪心]

$ 在字符串末尾断言位置

老实说,您的正则表达式与您的教程相去甚远 链接到它甚至没有远程关闭。我建议你去 返回并彻底重新阅读和研究指南,因为很明显你 还没有以任何方式应用它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-16
    • 1970-01-01
    • 2018-07-18
    • 2016-08-16
    • 2018-06-10
    • 1970-01-01
    • 2019-02-05
    • 2015-06-08
    相关资源
    最近更新 更多