我有以下Perl脚本,如果字符串只包含以下字符a-z
A-Z
短划线-
下划线_
或点.
,则会写入OK string包含任何其他字符。但是,无论我在字符串$ref
中添加什么,它都会写入。
在此示例中,匹配应失败,因为字符串包含+
\
和/
#!/usr/bin/perl
print "Content-type: text/html\n\n";
$ref = 'abcABCZ01234+56789.htm_abc\/--a';
if ($ref =~ m/[a-zA-Z_0-9\-\.]/) { print "OK\n\n"; }
else { print "FAIL\n\n"; }
print "<br>$ref\n\n";
1;
答案 0 :(得分:2)
当你的正则表达式找到满足正则表达式类的第一个字符时匹配,但为了确保所有字符都在正则表达式类中,你必须声明它从开始^
到字符串结尾{{1 }},
\z
答案 1 :(得分:2)
你只需要添加锚点和量词:
if ($ref =~ /^[a-zA-Z_0-9.-]+$/) { print "OK\n\n"; }
# ^ ^^