Android 规则与正则表达式的组合
在android项目中,我试图验证用户输入的密码,它必须遵循一些规则 这些规则是: 它必须有7个字符和以下3个条件 ** -一个小写字符 -一个大写字符 -一个数字 -一个特殊的角色 ** 例如: asd123 PP000 TTT999### 我试着用这个正则表达式Android 规则与正则表达式的组合,android,regex,Android,Regex,在android项目中,我试图验证用户输入的密码,它必须遵循一些规则 这些规则是: 它必须有7个字符和以下3个条件 ** -一个小写字符 -一个大写字符 -一个数字 -一个特殊的角色 ** 例如: asd123 PP000 TTT999### 我试着用这个正则表达式 ^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{7,}+$ 但这同时强制执行所有规则。这里的方法是错误的。你创建的正则表达式看起来像是床下的怪物,即使是懂
^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{7,}+$
但这同时强制执行所有规则。这里的方法是错误的。你创建的正则表达式看起来像是床下的怪物,即使是懂正则表达式的人也很难辨认 为什么不把它分成4个正则表达式(或者有规则的)并检查其中3个是否返回匹配项?您不仅可以使正则表达式更干净,还可以在需要时添加更多规则,而不必更改整个正则表达式 您还可以使用内置方法进行检查(如果适用于Android开发工具包) 某些伪代码如下所示:
result1 = Regex.IsMatch(password, rule1regex)
result2 = Regex.IsMatch(password, rule2regex)
...
resultN = Regex.IsMatch(password, rule3regex)
if(three_out_of_four_rules_apply)
password_valid = true
您还可以应用@pskink在注释中建议的方法,迭代密码的每个字符,并相应地设置输出。这里的方法是错误的。你创建的正则表达式看起来像是床下的怪物,即使是懂正则表达式的人也很难辨认 为什么不把它分成4个正则表达式(或者有规则的)并检查其中3个是否返回匹配项?您不仅可以使正则表达式更干净,还可以在需要时添加更多规则,而不必更改整个正则表达式 您还可以使用内置方法进行检查(如果适用于Android开发工具包) 某些伪代码如下所示:
result1 = Regex.IsMatch(password, rule1regex)
result2 = Regex.IsMatch(password, rule2regex)
...
resultN = Regex.IsMatch(password, rule3regex)
if(three_out_of_four_rules_apply)
password_valid = true
您还可以应用@pskink在注释中建议的方法,并对密码的每个字符进行迭代,并相应地设置输出。无需详细说明您的lookaheads(看起来是正确的),以下是您需要如何在纯正则表达式中实现“四分之三标准”:
(?=.*A)(?=.*B)(?=.*C)|(?=.*A)(?=.*B)(?=.*D)|(?=.*A)(?=.*C)(?=.*D)|(?=.*B)(?=.*C)(?=.*D)
你可以测试一下
因子分解并不能真正让它变得更好:
(?=.*A)(?:(?=.*B)(?=.*(?:C|D))|(?=.*C)(?=.*D))|(?=.*B)(?=.*C)(?=.*D)
显然,我建议您使用更高级的语言来实现这些约束。在不详细介绍您的lookaheads(看起来是正确的)的情况下,以下是您需要如何在纯正则表达式中实现“四分之三标准”:
(?=.*A)(?=.*B)(?=.*C)|(?=.*A)(?=.*B)(?=.*D)|(?=.*A)(?=.*C)(?=.*D)|(?=.*B)(?=.*C)(?=.*D)
你可以测试一下
因子分解并不能真正让它变得更好:
(?=.*A)(?:(?=.*B)(?=.*(?:C|D))|(?=.*C)(?=.*D))|(?=.*B)(?=.*C)(?=.*D)
显然,我建议使用更高级的语言来实现这些约束。那么您需要正则表达式做什么呢?如果你想验证你的输入,只需在所有字符上迭代并检查你的标准“以下四个条件中的三个”会很烦人:你将不得不使用一个替代来描述可能的条件combinations@pskink,这不是实际需要,我只是想知道这是否可能。你需要正则表达式做什么?如果你想验证你的输入,只需在所有字符上迭代并检查你的标准“以下四个条件中的三个”会很烦人:你将不得不使用一个替代来描述可能的条件combinations@pskink,这不是一个实际的需要,我只是想知道这是否可能。只是一个旁注-问题还不错。这是一个值得保留的合理问题,而且@Aaron给出的答案也是很好的(让我投票,Aaron:))。在纯正则表达式中,这简直是矫枉过正(尽管可能)。只是一个旁注——问题还不错。这是一个值得保留的合理问题,而且@Aaron给出的答案也是很好的(让我投票,Aaron:))。在纯正则表达式中,这简直是矫枉过正(尽管可能)。我接受了@Asunez的答案,因为它更有意义,但感谢您的支持help@Ric当然,我很欣慰您没有实际使用此代码;)我接受了@Asunez的回答,因为它更有意义,但谢谢你的支持help@Ric当然,我很欣慰您没有实际使用此代码;)