如果字符串仅包含 Perl 中的 ASCII 字母数字、破折号、下划线和点字符,则匹配
Match if string contains only ASCII alphanumeric, dash, underscore and dot characters in Perl
我有以下 Perl 脚本,如果字符串仅包含以下字符,则应该写入 OK a-z
A-Z
破折号 -
下划线 _
或点 .
和如果字符串包含任何其他字符,则失败。但是,无论我在字符串 $ref
中输入什么,它都显示 OK。
在此示例中,匹配应该失败,因为字符串包含 +
\
和 /
#!/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;
您的正则表达式在找到第一个满足正则表达式 class 的字符时匹配,但要确保所有字符都在正则表达式 class 中,您必须声明它从头开始匹配 ^
到字符串末尾 \z
,
$ref =~ m/^[a-zA-Z_0-9.-]+\z/;
您只需要添加锚点和量词:
if ($ref =~ /^[a-zA-Z_0-9.-]+$/) { print "OK\n\n"; }
# ^ ^^
我有以下 Perl 脚本,如果字符串仅包含以下字符,则应该写入 OK a-z
A-Z
破折号 -
下划线 _
或点 .
和如果字符串包含任何其他字符,则失败。但是,无论我在字符串 $ref
中输入什么,它都显示 OK。
在此示例中,匹配应该失败,因为字符串包含 +
\
和 /
#!/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;
您的正则表达式在找到第一个满足正则表达式 class 的字符时匹配,但要确保所有字符都在正则表达式 class 中,您必须声明它从头开始匹配 ^
到字符串末尾 \z
,
$ref =~ m/^[a-zA-Z_0-9.-]+\z/;
您只需要添加锚点和量词:
if ($ref =~ /^[a-zA-Z_0-9.-]+$/) { print "OK\n\n"; }
# ^ ^^