print IsNumber("0777 891 777") . "\n"; # 0 print IsNumber("1.5671") . "\n"; # 1 print IsNumber("121A3D") . "\n"; # 0 print IsNumber("777") . "\n"; # 1 print IsNumber("0") . "\n"; # 1 print IsNumber("-4.567") . "\n"; # 1 print IsNumber("+9.8.97") . "\n"; # 0 print IsNumber("+9.897") . "\n"; # 1 print IsNumber("+9.8¬97") . "\n"; # 0 print IsNumber("9.8[97") . "\n"; # 0 sub IsNumber { my ($string) = @_; my $valid = 0; my $count = $string =~ tr/\.//; if ( $string =~ m/[a-zA-Z\ \[\]]/ ) { $valid = 0; } elsif ( $string =~ /[^\x00-\x7F]/ ) { $valid = 0; } elsif ( $count > 1 ) { $valid = 0; } elsif ( $string =~ m/[#@':;><,.{}[]=!"£$%^&*()]/ ) { $valid = 0; } elsif ( $string =~ m/^[+-]?\d+$/ ) { $valid = 1; } elsif ( $string =~ m/^[+-]?[0-9]+[.]?[0-9]+/ ) { $valid = 1; } return $valid; }