我正在尝试为perl编写一个正则表达式来检查字母数字值(有空格)但不包括下划线“_”并将字符数限制为30我正在尝试这个但这不起作用任何人都可以告诉我,我做错了什么!此代码甚至将特殊字符作为字母数字值。 $ currLine ='Kapil @ 123'这不应该是有效值。
** $ currLine =“正则表达式”道歉我的意思是$ currLine =〜“regex”
if ($currLine = /^[a-zA-Z0-9]{1,30}$/){
say "Line3 Good: ", $currLine;
} else {
say "Error in Line 3: Name not alphamumeric ";
}
答案 0 :(得分:6)
您正在使用=
(作业),您应该=~
(绑定)。
启用警告可能会提醒您。您拥有的代码与$_
匹配,然后将匹配结果分配给$currLine
。
答案 1 :(得分:6)
$currLine = /^[a-zA-Z0-9]{1,30}$/
装置
$currLine = $_ =~ /^[a-zA-Z0-9]{1,30}$/
您想要使用
$currLine =~ /^[a-zA-Z0-9]{1,30}$/
现在解决其他问题。
\s
)。
$currLine =~ /^[\p{Alnum}\s]{0,30}\z/
答案 2 :(得分:2)
要使正则表达式匹配包括alphanumeric values
在内的所有spaces
,您需要在角色类中包含空格。您还应该在此处使用绑定运算符=~
而不是=
。
if ( $currLine =~ /^[a-z0-9\s]{1,30}$/i ) { ...
注意:我包含了i
修饰符,用于不区分大小写的匹配。
答案 3 :(得分:1)
您正在使用赋值运算符(=
)而不是匹配运算符(=~
)。您应该将if
语句更改为:
if ($currLine =~ /^[a-zA-Z0-9]{1,30}$/)
这也可以缩短为:
if ($currLine =~ /^[^\W_]{1,30}$/)
除了[^\W]
所代表的内容之外, \w
已经匹配。要丢弃_
,我们将其添加到否定字符类,因此使用 - [^\W_]
。但请注意,这不仅仅是[a-zA-Z0-9]
。它包括属于单词字符的其他unicode字符。要仅允许该正则表达式考虑ASCII文本,请添加/a
character set modifier:
/^[^\W_]{1,30}$/a