简体   繁体   中英

decimal and integer numbers that is less 91 with regex

I have this regex /^(0|[1-9]\d*)(\.\d+)?$/

It allow all decimal and integer numbers.

What I need it to add all numbers that is less than 91.

How could I implement that?

Please help

Integers or decimals less than 91 could be achieved like so:

^(?:0|[1-8]\d?|90?)(?:\.\d+)?$

See an online demo .

  • ^ - Start line anchor.
  • (?: - Open 1st non-capture group:
    • 0|[1-8]\d?|90? - Match zero or 1-8 and an optional digit or a nine with an optional zero.
    • ) - Close 1st non-capture group.
  • (?: - Open 2nd non-capture group:
    • \.\d+ - A literal dot and 1+ digits.
    • )? - Close 2nd non-capture group and make it optional.
  • $ - End line anchor.

Edit: If you don't mind matching a double zero as per "00" or "00.0000" you could use:

^(?:\d0?|[1-8]\d?)(?:\.\d+)?$

Or, even less verbose, using a negative lookahead:

^(?!9[1-9])\d\d?(?:\.\d+)?$

With your shown samples, please try following.

^(?:[0-9]|[0-8][0-9]|90)(?:\.\d+)?$

Online demo for above regex

OR could be shorten as following too:

^(?:[0-8]?[0-9]|90)(?:\.\d+)?$

Explanation: Adding detailed explanation for above.

^(?:                   ##Matching from starting of value and starting a non-capturing group here.
 [0-9]|[0-8][0-9]|90   ##Matching either 0 to 9 OR till 89 OR 9 here.
)                      ##Closing non-capturing group here.
(?:\.\d+)?$            ##In a non-capturing group matching dot followed by 1 or more digits keep it optional at the last of value.


Bonus solution: Based on my assumption only, in case you want to match additional zeroes but still lesser than 91 then try following.

^(?:0+)?(?:[0-9]|[0-8][0-9]|90)(?:\.\d+)?$

What about this?

^(90|[0-8][0-9])$

Simply match 90 or 00 until 89 .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM