If you want to test if the complete input string matches a pattern, then you should start your regex with ^
and end with $
. Otherwise you are just testing if the input string contains a substring that matches the given pattern.
^
means "Start of the line"
$
means "End of the line"
In this case it means you have to rewrite you regex to:
/^(\d{1,3}(,\d{3})*(\.\d\d)?|\.\d\d)$/
If you would omit the extra parentheses, because otherwise the "|"
would have lower precedence than the ^
and $
, so input like "1,234.56abc"
or "abc.12"
would still be valid.