我想要一个脚本来选择用户名。选择用户名的规则是
-
用户名的最小长度为5个字符,最大长度为10个
-
它应该至少包含一个来自A-Z 的字母
-
它应该至少包含0-9 中的一个数字
-
它应该至少包含@#*=中的一个字符
-
它不应包含任何空格。
我试过这个
if ( length $passwd[$i] <= 10
&& length $passwd[$i] >= 5
&& $passwd[$i] =~ /.*p{Lu}/
&& $passwd[$i] =~ tr/0-9//cd
&& $passwd[$i] =~ /[a-z]/ ) {
print "PASSn";
}
else {
print "FAILn";
}
我设法用查找法找到了Regex。我试了很多例子来测试它,看起来它是根据你的条件工作的。如果它不适用于任何模式,请告诉我。
echo eff*sdE8ff | perl -n -e 'print if /^(?=.{5,10}$)(?=.*?[A-Z])(?=.*?d)(?=.*[@#*=])(?!.*s+)/'
更新:看完OP的评论。。。
这是代码:
#!/usr/bin/perl
use warnings;
use strict;
my @passwd = ('eff*sdE8ff', 'eff*sde8ff');
foreach (@passwd)
{
if ($_ =~ /^(?=.{5,10}$)(?=.*?[A-Z])(?=.*?d)(?=.*[@#*=])(?!.*s+)/)
{
print "PASS: $_ n";
}
else
{
print "FAIL n";
}
}
输出:
PASS: eff*sdE8ff
FAIL
对于新手用户来说,这里有一个可读性更强的替代方案:
#!/usr/bin/perl
use strict;
use warnings;
my $name = $ARGV[0];
if((length($name)<5 || length($name)>10) ||
($name !~ /[A-Z]/) ||
($name !~ /[0-9]/) ||
($name !~ /[@#*=]/) ||
($name =~ / /)){
print "FAILn";
} else {
print "PASSn";
}