Lots of good stuff here. This oneliner is what makes perl cool but it's
like speaking in tongue -:)

>   sub isValidChars { shift =~ /^[A-Za-z_]+$/ }


Thanks,
-rkl

> On Sep 29, [EMAIL PROTECTED] said:
>
>>Since, everyone is so lively today, I'm going to push my luck today with
>>this list. I need a little help here with validating a string to have
>> only
>>characters that I want, A-z and _ (underscore).
>
> You'll want to use a regular expression, or perhaps just the tr///
> operator.
>
>>sub isValidChars
>>{ my $retVal;
>>
>>  @chars=split(//,$_[0]);
>>
>>  for(@chars)
>>  {
>>    if($_ =~ /A-z/) { print "good [" . $_ . "]\n"; $retVal=1; }
>
> First, you probably mean /[A-z]/.  Second, you probably mean /[A-Za-z_]/.
> Third, it's silly to do this character-by-character.
>
>>    else { print "bad [" . $_ . "]\n"; $retVal=0; break; }
>
> "break" is spelled "last" in Perl.
>
>>  }
>>  return $retval;
>>}
>
> Here are a few variations:
>
>   sub isValidChars {
>     my $str = shift;
>     if ($str =~ /^[A-Za-z_]+$/) { return 1 }
>     else { return  }
>   }
>
> which can be written as simply
>
>   sub isValidChars {
>     return shift =~ /^[A-Za-z_]+$/;
>   }
>
> and, in fact, the 'return' isn't necessary:
>
>   sub isValidChars { shift =~ /^[A-Za-z_]+$/ }
>
> Or you could do the opposite:  make sure the string DOESN'T have any
> ILLEGAL characters in it.  The only problem with this is that an empty
> string is considered valid.  That's why this approach includes a length()
> test.
>
>   sub isValidChars {
>     my $str = shift;
>     return length($str) and $str !~ /[^A-Za-z_]/;
>   }
>
> That returns true if and only if $str is non-zero in length and DOES NOT
> contain a NON-[A-Za-z_] character.
>
> Another way to do it is with tr///.
>
>   sub isValidChars {
>     my $str = shift;
>     return length($str) and ($str =~ tr/A-Za-z_//c) == 0;
>   }
>
> This time, we use length() again, but we use the tr/// operator, instead
> of the m// operator.  The tr/// takes a character class, basically, and
> the /c modifier at the end means "take the opposite of this class".  So
> $str =~ tr/A-Za-z_//c is scanning $str for any NON-[A-Za-z_] characters.
> tr/// returns the number of matching characters found.  If the number of
> non-[A-Za-z_] characters is zero, and the length isn't zero, then it's a
> valid string.
>
> Which method should you use?  I'd probably use the simplest form of the
> first isValidChars() I showed.
>
> --
> Jeff "japhy" Pinyan      [EMAIL PROTECTED]      http://www.pobox.com/~japhy/
> RPI Acacia brother #734   http://www.perlmonks.org/   http://www.cpan.org/
> <stu> what does y/// stand for?  <tenderpuss> why, yansliterate of course.
> [  I'm looking for programming work.  If you like my work, let me know.  ]
>
>
> --
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to