Issue
Issue: I'm trying to achieve the following results for the test cases using a Regex pattern on a input type text html.
Looking to meet the following criteria's:
Numeric only - no alpha or special characters allowed
No spaces between digits
two digits after decimal is allowed
Cannot be zero (0)
1st digit of the limit can not be zero (ex:01200)
testPattern: RegExp = /(?=.*?\d)^\$?(([1-9]\d{0,2}(,\d{3})*)|\d+)?(\.\d{1,2})?$/;
Expected Results:
- 0 //false
- 012 // false
- 0.00 //false
- 0.0 //false
-
- //false
- 00122 //false
- 0.12 //true
- 0.01 //true
- 1,234.00 // true
- 1.00 //true
- 123,456 //true
- 1.23 // true
TIA
Solution
You could assert not starting with a zero followed by only digits, or only dots, comma's and zero's till the end of the string.
^(?![0,.]*$|0\d*$)\d{1,3}(?:,\d{3})*(?:\.\d{1,2})?$
Explanation
^Start of string(?!Negative lookahead[0,.]*$Match optional zeroes,or.to the end of string|Or0\d*$Match0and optional digits to the end of string
)Close lookahead\d{1,3}Match 1-3 digits(?:,\d{3})*Optionally repeat matching,and 3 digits(?:\.\d{1,2})?Optionally match.and 1-2 digits$End of string
const regex = /^(?![0,.]*$|0\d*$)\d{1,3}(?:,\d{3})*(?:\.\d{1,2})?$/;
[
"0",
"012",
"0.00",
"0.0",
"0.",
"00122",
"0.12",
"0.01",
"1,234.00",
"1.00",
"123,456",
"1.23"
].forEach(s => console.log(`${s} --> ${regex.test(s)}`));
Answered By - The fourth bird
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.