ankush981
ankush981

Reputation: 5417

JavaScript regular expression match amount

I'm trying to write a regular expression to match amounts. In my case, what I need is that either the amount should be a positive integer or if the decimal is used, it must be followed by one or two integers. So basically, the following are valid amounts:

What I wrote was this: /[0-9]+(\.[0-9]{1,2}){0,1}/

My thinking was that by using parenthesis like so: (\.[0-9]{1,2}), I would be able to bundle the whole "decimal plus one or two integers" part. But it isn't happening. Among other problems, this regex is allowing stuff like 245. and 345.567 to slip through. :(

Help, please!

Upvotes: 1

Views: 104

Answers (1)

joemfb
joemfb

Reputation: 3056

Your regular expression is good, but you need to match the beginning and end of the string. Otherwise, your regex can match only a portion of the string and still (correctly) return a match. To match the beginning of the string, use ^, for the end, use $.

Update: as Avinash has noted, you can replace {0,1} with ?. JS supports \d for digits, so the regex can be further simplified

Finally, since if are only testing against a regex, you can use a non-capturing group ( (?:...) instead of (...)), which offers better performance.

original:

/[0-9]+(\.[0-9]{1,2}){0,1}/.test('345.567')

Fixed, and faster ;)

 /^\d+(?:\.\d{1,2})?$/.test('345.567')

Upvotes: 3

Related Questions