#!/usr/bin/perl # check for numbers with punctuation use strict; # examples for "common-written" numbers foreach my $var ( '','foo 30','.20','20.',',20','20,','1.3E2', '2..3','++3','2.3.', ,'..3', 0,100,'100.23','1,100.23','-3E-2' ) { print "String: $var\n"; if (IsANumber($var)) { print "vroom says True, "; } else { print "vroom says False, "; } if (IsANumberCookbook($var)) { print "Cookbook says True, "; } else { print "Cookbook says False, "; } if (IsANumberMine($var)) { my $out = $var * $var; print "I say True and square is $out\n\n"; } else { print "I say False\n\n"; } } sub IsANumber { # vroom version my $var = $_[0]; if ( # contains digits,commas and 1 period ($var =~ /(^[0-9]{1,}?$)|(\,*?)|(\.{1})/) && # does not contain alpha's, more than 1 period # commas or periods at the beggining and ends of # each line !($var =~ /([a-zA-Z])|(^[\.\,]|[\.\,]$)/) && # is not null ($var ne '') ) { return(1) } else { return(0) } } sub IsANumberCookbook { # Perl Cookbook version my $var = $_[0]; if ( $var =~ /^([+-]?)(?=\d|\.\d)\d*(\.\d)?([Ee]([+-]?\d+))?$/ ) { return(1) } else { return(0) } } sub IsANumberMine { # my version my $var = $_[0]; if ( $var =~ /^([+-]?)(\d+\.|\.\d+|\d+)\d*([Ee]([+-]?\d+))?$/ ) { return(1) } else { return(0) } }