in reply to Floating Point/Integer Regular Expression

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'

Replies are listed 'Best First'.
Re^2: Floating Point/Integer Regular Expression
by shortyfw06 (Beadle) on Jul 25, 2012 at 15:46 UTC

    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.

    /^(?:|-|\d+|-\d+|\d+.|-\d+\.|\d+\.\d+|-\d+\.\d+)$/

    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.

      /^[-]?(?:[.]\d+|\d+(?:[.]\d*)?)$/

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

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