Jordan Hochstetler
Jordan Hochstetler

Reputation: 1416

Decimal Regex Constraint Matching (Four digits before optional decimal point and two after)

I need to figure out how to make my regex allow match correctly each time I type a number/decimal point. I want to limit the number of digits before and after the decimal point, which isnt too hard but i cant figure out how to allow the decimal point to match as well.

1 - match
12 - match
1234 - match
12345 - wrong
1234. - match
1234.1 - match
1234.12 - match
1234.123 - wrong

Other matched numbers
12.12
1.0
123.99

Edit:

So I want a max of 4 numbers before the decimal place and two after. Also the decimal place is optional.

The tricky part is that I want it to fail if the fifth character isn't a decimal point.

Upvotes: 0

Views: 355

Answers (3)

martianwars
martianwars

Reputation: 6500

Something like this will help

r'^\d{1,4}(\.\d{0,2})?$'

As you must be aware, \d represents a digit, . for the decimal point and {min_required,max_required}. Be sure to test your regular expression prior to using them here.

Upvotes: 0

Rakholiya Jenish
Rakholiya Jenish

Reputation: 3223

You can use the following regex to select only those words that consists of digits and satisfying your condition.

/(?<=^|\s)\d{1,4}(?:\.\d{0,2})?(?=\s|$)/g

Positive lookahead and lookbehind are used to make sure that a whitespace is around the number.

DEMO

Regular expression visualization

Debuggex Demo

Upvotes: 0

rottweilers_anonymous
rottweilers_anonymous

Reputation: 406

You need to specify your constraints better; I'm assuming you want a maximum of 4 before the dot and 2 after:

/^\d{1,4}(\.\d{0,2})?$/

edit: I added beginning and end of string matchers. Should work as you want now

Upvotes: 1

Related Questions