Regex 将正则表达式语句组合在一起
我正在尝试将这些正则表达式组合成一个正则表达式。有人知道这是否可能吗 基本上,我试图检查字符串是否包含小写字母、大写字母和数字Regex 将正则表达式语句组合在一起,regex,Regex,我正在尝试将这些正则表达式组合成一个正则表达式。有人知道这是否可能吗 基本上,我试图检查字符串是否包含小写字母、大写字母和数字 (.*[a-z]+.*) (.*[A-Z]+.*) (.*[0-9]+.*) 所以这些字符串都会通过 aA1 a1A Aa1 A1a 1aA 1Aa 返回false的示例 aa1 AA1 a1a AAa a1 1a 1AA 1A etc.. 是的,但是很恶心。(示例为Perl语言) 必须定义所有$1、$2和$3(由于0为false,因此true不会将其删除) 为了
(.*[a-z]+.*)
(.*[A-Z]+.*)
(.*[0-9]+.*)
所以这些字符串都会通过
aA1
a1A
Aa1
A1a
1aA
1Aa
返回false的示例
aa1
AA1
a1a
AAa
a1
1a
1AA
1A
etc..
是的,但是很恶心。(示例为Perl语言)
必须定义所有$1
、$2
和$3
(由于0为false,因此true不会将其删除)
为了每个人的利益,最好将它保留在三个简单的正则表达式上,并编写一个子程序
sub is_valid_string {
my $str = shift;
return 0 unless $str =~ /[a-z]/;
return 0 unless $str =~ /[A-Z]/;
return 0 unless $str =~ /[0-9]/;
return 1;
}
一种非常简单的方法是列举所有六种组合:
[a-z][A-Z][0-9]|[a-z][0-9][A-Z]|[A-Z][a-z][0-9]|[A-Z][0-9][a-z]|[0-9][a-z][A-Z]|[0-9][A-Z][a-z]
基本上,你有三种类型的角色-Upper、Lower和Digit。这六种组合是
LUD|LDU|ULD|UDL|DLU|DUL
如你所见,这很快就会变得复杂。如果你想用它来检查密码,用宿主语言进行字符类计数是更好的选择。和“a1”会失败吗?另外,您是否正在检查密码复杂性?不要这样做。@Schwern是的,它应该返回false。。。为什么不呢?密码破解已经变得非常复杂,密码中有数字意味着质量的日子已经一去不复返了。要么使用高质量的密码检查器,要么就不用麻烦了。你只会增加复杂性,让编写好密码的人感到恼火。继续询问更多细节。@Schwern谢谢您提供的信息!我会进一步调查的!对于“非常简单”的某些复杂值;)@Schwern我的意思是,这很简单:你所做的就是列出所有600个选项:-)
[a-z][A-Z][0-9]|[a-z][0-9][A-Z]|[A-Z][a-z][0-9]|[A-Z][0-9][a-z]|[0-9][a-z][A-Z]|[0-9][A-Z][a-z]
LUD|LDU|ULD|UDL|DLU|DUL