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 0 }
  }

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]

Reply via email to