Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 3573
  • Last Modified:

Checking if a string contains a letter in ksh

Hi, I'd like to check a string for the presence of letters.

E.g.

"123" valid
"abc" invalid
"123abc"  invalid

At the moment I don't know how to check when a string has both a number and a letter; it just crashes out.

My current code is as follows:

i=1
until (test $i -gt 4)
do
  echo "$arg1"|cut -f$i -d'.'|read octet
  if [[ "$octet" = +([a-z]) ]]
  then
    echo "Error - invalid IP address entered"
    IPvalid=0
    i=4
  else
    if [[ $octet -ge 0 && $octet -le 255 ]]
    then
      IPvalid=1
    else
      echo "Error - invalid IP address entered"
      IPvalid=0
      i=4
    fi
  fi
  i=`expr $i + 1`
done

Thanks

0
r47463
Asked:
r47463
  • 2
  • 2
  • 2
  • +1
1 Solution
 
r47463Author Commented:
PS rather than just letters, I would like any non-numeric characters to be invalid.
0
 
FishMongerCommented:
Would you be interested in using Perl instead of ksh?

#!/usr/bin/perl -w

use strict;
use Validate::Net;

my $good = '123.1.23.123';
my $bad1 = '123.432.21.12';
my $bad2 = 'abc.232.21.12';

foreach ( $good, $bad1, $bad2 ) {
   if ( Validate::Net->ip( $_ ) ) {
      print "'$_' is a valid ip\n\n";
   }
   else {
      print "'$_' is not a valid ip address because:\n";
      print Validate::Net->reason . "\n\n";
   }
}


-- outputs --
'123.1.23.123' is a valid ip

'123.432.21.12' is not a valid ip address because:
The maximum value for an ip element is 255

'abc.232.21.12' is not a valid ip address because:
Does not fit the basic dotted quad format for an ip
0
 
FishMongerCommented:
That code sample is from the CPAN documentation for the Validate::Net module.

http://search.cpan.org/~adamk/Validate-Net-0.5/lib/Validate/Net.pm
0
Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

 
bhagyeshtCommented:
Hi r47463,
use isnumeric function to determine whether its a number or not

Cheers!
0
 
sunnycoderCommented:
[!0-9] represents all non numeric characters .. 0-9 is the range for numeric characters and ! is negation
0
 
bhagyeshtCommented:
sorry wrongly interpreted it for VB.

Regards,
Bhagyesh
0
 
sunnycoderCommented:
>At the moment I don't know how to check when a string has both a number and a letter; it just crashes out.

execute this

echo $u | grep "[^0-9]" >dev/null
then check for value of $? ... If 1 then it was composed of characters from 0-9

if [ $? -eq 1 ]
then
          echo valid
else
          echo invalid
fi
0
 
r47463Author Commented:
Superb thanks!
0

Featured Post

[Webinar On Demand] Database Backup and Recovery

Does your company store data on premises, off site, in the cloud, or a combination of these? If you answered “yes”, you need a data backup recovery plan that fits each and every platform. Watch now as as Percona teaches us how to build agile data backup recovery plan.

  • 2
  • 2
  • 2
  • +1
Tackle projects and never again get stuck behind a technical roadblock.
Join Now