I think that both the Cookbook and vroom miss some valid numbers.
Here's my proposed checker. HOpe I don't get wrong ones, instead :)
Roberto
#!/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) } }

In reply to Re: How to identify a number datatype in a string? by rbi
in thread How to identify a number datatype in a string? by BBQ

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.