[Okta Webinar] Learn how to a build a cloud-first strategyRegister Now

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 546
  • Last Modified:

Perl Regular Expression?

I need to write a regular expression where the question marks are in the code code is below. The $var1 will be a value where only numbers and a period are ok.

Valid values would be:
1.0001
2.3
0.2

Invalid would be any letters, a comma, other characters, etc...
Only numbers and a period are valid.

Please post an answer and explanation of what it does. I'm terrible at regular expressions and in a hurry to finish some code, but still trying to learn them as I go! Thanks!  

if( $var1 ~= ???? ){
    print "true";
}else{
    print "false";
}

Open in new window

0
KGNickl
Asked:
KGNickl
  • 2
  • 2
  • 2
  • +1
1 Solution
 
Pratima PharandeCommented:
^\d+(\.\d)?$
0
 
Pratima PharandeCommented:
0
 
ozoCommented:
perldoc -q "How do I determine whether a scalar is a number/whole/integer/float"
Found in perlfaq4.pod
       How do I determine whether a scalar is a number/whole/integer/float?

       Assuming that you don't care about IEEE notations like "NaN" or
       "Infinity", you probably just want to use a regular expression.

               if (/\D/)            { print "has nondigits\n" }
               if (/^\d+$/)         { print "is a whole number\n" }
               if (/^-?\d+$/)       { print "is an integer\n" }
               if (/^[+-]?\d+$/)    { print "is a +/- integer\n" }
               if (/^-?\d+\.?\d*$/) { print "is a real number\n" }
               if (/^-?(?:\d+(?:\.\d*)?|\.\d+)$/) { print "is a decimal number\n" }
               if (/^([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?$/)
                               { print "a C float\n" }

       There are also some commonly used modules for the task.  Scalar::Util
       (distributed with 5.8) provides access to perl's internal function
       "looks_like_number" for determining whether a variable looks like a
       number.  Data::Types exports functions that validate data types using
       both the above and other regular expressions. Thirdly, there is
       "Regexp::Common" which has regular expressions to match various types
       of numbers. Those three modules are available from the CPAN.

       If you're on a POSIX system, Perl supports the "POSIX::strtod"
       function.  Its semantics are somewhat cumbersome, so here's a "getnum"
       wrapper function for more convenient access.  This function takes a
       string and returns the number it found, or "undef" for input that isn't
       a C float.  The "is_numeric" function is a front end to "getnum" if you
       just want to say, "Is this a float?"

               sub getnum {
                       use POSIX qw(strtod);
                       my $str = shift;
                       $str =~ s/^\s+//;
                       $str =~ s/\s+$//;
                       $! = 0;
                       my($num, $unparsed) = strtod($str);
                       if (($str eq '') || ($unparsed != 0) || $!) {
                                       return undef;
                               }
                       else {
                               return $num;
                               }
                       }

               sub is_numeric { defined getnum($_[0]) }
0
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
käµfm³d 👽Commented:
pratima_mcs' solution is close, except that it won't handle your first sample:  1.0001. The correction is small though:

^\d+(?:\.\d+)?$

Open in new window


As for the explanation:
^          Beginning of string
\d+        One-or-more ( + ) of a digit ( \d )
(? ... )   Non-capturing group -- treat everything inside as one unit
\.         Literal period
\d+        One-or-more ( + ) of a digit ( \d )
?          Zero-or-one. Modifies the thing to the left, which in this case is the non-capturing group
$          End of string

Open in new window

0
 
KGNicklAuthor Commented:
m/^\d*\.\d+$/
0
 
käµfm³d 👽Commented:
Provided answers did not work or where not what I was asking for.
You can't honestly be serious.
0
 
KGNicklAuthor Commented:
Award kaufmed points. I didn't look at new answers after 11:00 this morning and then just closed it w/ adding my comments. So that answer is good and can be awarded points, just was after I already located the answer earlier in the morning.
0

Featured Post

Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

  • 2
  • 2
  • 2
  • +1
Tackle projects and never again get stuck behind a technical roadblock.
Join Now