I have couple specific string formatting i want to achieve for different entities:
Entity 1: 1111-abcd-1111
or 1111-abcd-111111
Entity 2: [10 any symbol or letter(all cap) or number]-[3 letters]
Entity 3: [3 letters all cap]-[3 any]-[5 number]
Not sure if Regex is best approach, because i also want to use this as validator when user starts typing the char's it will check against that Entity selected and then against it's RegEx
CodePudding user response:
Here is a regex with some input strings:
const strings = [
'1111-abcd-1111', // match
'1111-abcd-111111', // match
'1111-abcd-1111111', // no match
'ABCS@!%!3!-ABC', // match
'ABCS@!%!3!-ABCD', // nomatch
'ABC-@A3-12345', // match
'ABC-@A3-1234' // no match
];
const re = /^([0-9]{4}-[a-z]{4}-[0-9]{4,6}|.{10}-[A-Za-z]{3}|[A-Z]{3}-.{3}-[0-9]{5})$/;
strings.forEach(str => {
console.log(str ' => ' re.test(str));
});
Result:
1111-abcd-1111 => true
1111-abcd-111111 => true
1111-abcd-1111111 => false
ABCS@!%!3!-ABC => true
ABCS@!%!3!-ABCD => false
ABC-@A3-12345 => true
ABC-@A3-1234 => false
Explanation of regex:
^
- anchor text at beginning, e.g. what follows must be at the beginning of the string(
- group start[0-9]{4}-[a-z]{4}-[0-9]{4,6}
- 4 digits,-
, 4 lowercase letters,-
, 4-6 digits|
- logical OR.{10}-[A-Za-z]{3}
- any 10 chars,-
, 3 letters|
- logical OR[A-Z]{3}-.{3}-[0-9]{5}
- 3 uppercase letters,-
, any 3 chars,-
, 5 digits)
- group end$
- anchor at end of string
Your definition is not clear; you can tweak the regex as needed.