Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 规则与正则表达式的组合_Android_Regex - Fatal编程技术网

Android 规则与正则表达式的组合

Android 规则与正则表达式的组合,android,regex,Android,Regex,在android项目中,我试图验证用户输入的密码,它必须遵循一些规则 这些规则是: 它必须有7个字符和以下3个条件 ** -一个小写字符 -一个大写字符 -一个数字 -一个特殊的角色 ** 例如: asd123 PP000 TTT999### 我试着用这个正则表达式 ^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{7,}+$ 但这同时强制执行所有规则。这里的方法是错误的。你创建的正则表达式看起来像是床下的怪物,即使是懂

在android项目中,我试图验证用户输入的密码,它必须遵循一些规则

这些规则是: 它必须有7个字符和以下3个条件

**

-一个小写字符

-一个大写字符

-一个数字

-一个特殊的角色

**

例如:

asd123

PP000

TTT999###

我试着用这个正则表达式

^(?=.*?[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当然,我很欣慰您没有实际使用此代码;)