0

[a-zA-z0-9-._,\s] 文字セットのみに一致する文字列の正規表現を記述する必要があります。上記の文字セット以外では、エラーが発生するはずです。また、文字列の長さは 30 文字のみです。ワードラップも実装しました。ただし、文字列が上記の文字セット以外の場合、エラーをスローできません。どんな助けでも大歓迎です!

私の文字列は次のようになります:

   shubhwork1234  567$#@!%^&*()<>:"-,._abadcew

私のコードは、[a-zA-z0-9-._,\s] 文字セットのみが許可されていることを示すエラーをスローする必要があります。

私の文字列が以下の場合:エラーは発生しません。

   shubhworkwwwwwwwww1234567-,._  abadcew

私のコードは次のようになります:

   #!/usr/bin/perl
   my $prodname;
   my $temp_str;
   my $space = ' '; # word wrap done usign space character
   $prodname = "shubhwork1234  567$#@!%^&*()<>:"-,._abadcew";
   print (Product name not specified-name 1\n) unless($prodname);
   print "\n Product name is : $prodname";

   # For Product name , only 30 characters are allowed.
   print "\nLength of product name : ",length($prodname),"\n";    
   if(length($prodname) > 30)
   {
        print "\n Hello world";
            $temp_str = substr($prodname,0,40);
            print qq| Length of Product Name can be 40 characters.Terminating rest of the string\n|);

  #Handling xml special characters >,<,&,",'
     $temp_str =~ s/&/&amp;/g; 
     $temp_str =~ s/</&lt;/g;
     $temp_str =~ s/>/&gt;/g;
     $temp_str =~ s/"/&quot;/g;
     $temp_str =~ s/'/&apos;/g;
     $temp_str =~ s/[\x00-\x08\x0B\x0C\x0E-\x19]//g;

     # Word wrap
     my $rindx = rindex($temp_str,$space);
     $temp_str = substr($temp_str,0,$rindx);
     print "\n Sting temp is : $temp_str";

     #Here I ma not able to use negate properly for the character set. 
     if ($temp_str =~ m/^[a-zA-Z0-9]-._,\s*/)
     {
        print (qq| For product name : Invalid Input : Only [a-zA-Z0-9-._,] and spaces are allowed\n|);
     }                  
       $prodname = $temp_str; 
      print "\n assigning string is :",$prodname;
     }
4

2 に答える 2

1

長さも確認したいので、否定する必要はありません。文字列全体が許可された文字数の 30 以下であることを確認できます。

/\A[a-zA-z0-9-._,\s]{0,30}\z/
于 2013-10-31T04:39:54.697 に答える