PERL:我的正则表达中缺少什么?

时间:2016-11-10 17:30:13

标签: regex perl cgi

这是学校项目的一部分。我无法弄清楚我的正则表达式中的问题是什么。我有更多的工作,但这些给我带来了困难。 Apache没有告诉你出错的确切位置。

名字和姓氏必须是两个简单名称,并以姓氏,名字格式输出

my $name = param('name');

if($name =~ {2}) {
    print "Name will be stored as $2, $1<br/><br/>";
} else {
    print "Bad name. Enter just two names, your first and last<br/><br/>";
}

密码必须按照正则表达式的顺序排列。从单个大写字母,2个数字,单个空格,2-3个小写字母,一个特殊字符(不是字母或数字)开始。

my $password = param('password');

if ($password =~ /[A-Z]+\d{2}+\s+[a-z]{2,3}+-]\^$/) {
print "Password $password was accepted<br/><br/>";
} else {
print "Bad password, $password was not accepted<br/><br/>";
}

2 个答案:

答案 0 :(得分:6)

  

Apache并没有告诉你出错的确切位置。

首先,找到您的Apache错误日志。它将包含实际错误。我不能告诉你它在哪里,但我从/var/log开始。

其次,通过Web服务器调试代码会让事情变得更加困难。您可能正在使用CGI.pm,它可以接受命令行上的参数进行调试。

perl /path/to/your/program name='Michael Schwern'

第二,turn on strict and warnings。他们会指出像这样的错别字错误......

$ perl -w ~/tmp/test.plx name=foo
Odd number of elements in anonymous hash at /Users/schwern/tmp/test.plx line 5.
Bad name. Enter just two names, your first and last<br/><br/>

这就是这个。

$name =~ {2}

这表示使用键2和未定义的值创建匿名哈希。然后将其字符串化为类似HASH(0x7fca01805668)的内容,然后将其用作正则表达式。换句话说:废话。

你正在寻找的是这样的东西,它寻找由一些空格分隔的两个单词。

$name =~ m{^(\w+)\s+(\w+)$};

阅读Perl regex tutorial了解详情。

答案 1 :(得分:2)

很难说你想做什么,让其他人为你做功课不会教你一件事

$name =~ {2}

根本不是正则表达式:您正在构建匿名哈希{ 2 => undef }并使用其字符串化引用作为模式。这将是HASH(0x71c328),因此无法正常工作

这个是不可理解的

$password =~ /[A-Z]+\d{2}+\s+[a-z]{2,3}+-]\^$/

它会匹配A99 aaa-]^之类的东西,但我怀疑这是否是你想要的。 +之后的加号{2,3}是什么?