Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation

Floating Point/Integer Regular Expression

by shortyfw06 (Beadle)
on Jul 25, 2012 at 15:18 UTC ( #983684=perlquestion: print w/replies, xml ) Need Help??
shortyfw06 has asked for the wisdom of the Perl Monks concerning the following question:

I am trying to modify the following regular expression, which is for integers either negative or positive.

$_[0] =~ /^(?:|-|\d+|-\d+)$/

I'd like the regular expression to also capture floating point values either negative or positive. I thought this would work but it is not.

$_[0] =~ /^(?:|-|\d+|-\d+|\d+\.\d+|-\d+\.\d+)$/

Replies are listed 'Best First'.
Re: Floating Point/Integer Regular Expression
by tobyink (Abbot) on Jul 25, 2012 at 15:29 UTC

    Scalar::Util provides an excellent looks_like_number function.

    use Scalar::Util qw< looks_like_number >; use Test::More tests => 6; ok looks_like_number '1'; ok looks_like_number '123'; ok looks_like_number '-123'; ok looks_like_number '1.0'; ok looks_like_number '123.0'; ok looks_like_number '-123.0';

    View the source for Scalar::Util::PP - it's got a few regular expressions you could probably borrow.

    perl -E'sub Monkey::do{say$_,for@_,do{($monkey=[caller(0)]->[3])=~s{::}{ }and$monkey}}"Monkey say"->Monkey::do'

      Thank you. That is a useful function! I ended up answering my own question for a regex that includes negative/positive integers and negative/positive floating points.


      And just for clarification, this is used as a -validatecommand.

        Did you know that regexp matches:

        • -
        • 1.

        But fails to match:

        • .1
        • -.1

        You might want to try this. It's somewhat simpler than yours, and it disallows the single hyphen, but allows decimals which start with the decimal point and no preceding 0.


        Or if you consider a leading/trailing decimal point to be an error, it can be made simpler:

        perl -E'sub Monkey::do{say$_,for@_,do{($monkey=[caller(0)]->[3])=~s{::}{ }and$monkey}}"Monkey say"->Monkey::do'
Re: Floating Point/Integer Regular Expression
by moritz (Cardinal) on Jul 25, 2012 at 16:49 UTC

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://983684]
Approved by marto
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (7)
As of 2018-06-20 06:11 GMT
Find Nodes?
    Voting Booth?
    Should cpanminus be part of the standard Perl release?

    Results (116 votes). Check out past polls.