1

I want to make sure that the input is no more than 10 digits before the decimals point so it will match DECIMAL(12,2).

I already tried :

^(?=.{0,13}$)[0-9]{1,3}(,[0-9]{3})*(\.[0-9]+)?$

But it counts the digits after decimals too, so what I want to match is:

1,111,111,111.00

so it will keep matching with or without the decimals, what I tried only can match with:

1,111,111,111

Adrian Edy Pratama
  • 3,841
  • 2
  • 9
  • 24

1 Answers1

2

You can assert from the start of the string what is on the right is 1-10 times a digit followed by an optional comma followed by a dot and 2 digits.

Then use the pattern to match the exact format.

Note that in your pattern the (\.[0-9]+)? at the end can match more than 2 digits. If you want to match an optional dot and 2 digits, use (?:\.[0-9]{2})?

^(?=(?:\d,?){1,10}(?:\.\d{2})?$)[0-9]{1,3}(?:,[0-9]{3})*(?:\.[0-9]+)?$

Regex demo

The fourth bird
  • 154,723
  • 16
  • 55
  • 70