perl:如何检查字母数字值并使用正则表达式将字符串大小限制为30

时间:2013-10-22 16:37:31

标签: regex perl

我正在尝试为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 "; 
}

4 个答案:

答案 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}$/

现在解决其他问题。

  • 你不允许空格。 (以下内容允许使用空格。如果您具体指SPACE,请使用而不是\s)。
  • 您允许使用尾随换行符。
  • 如果31是换行符,则允许31个字符。
  • 你禁止使用许多字母数字字符。
  • 你禁止零个字符。

$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