Goal: RegEx to fit many posible NDC 10 & 11 formats.
I've made a great start... NDC 10:
^[0-9][0-9][0-9][0-9]\-[0-9][0-9][0-9][0-9]\-[0-9][0-9]$
e.g. 1234-1234-12
Reference
However, I've since learnt there are other formats and 11 digits:
- 4-4-2
- 5-3-2
- 5-4-1
- 5-4-2 (11 digits)
How can I write one RegEx for all these possibilities?
Issues:
- Optional 11th digit,
- Moving hyphen
CodePudding user response:
You can use
^(?:\d{4}-\d{4}-\d{2}|\d{5}-(?:\d{3}-\d{2}|\d{4}-\d{1,2}))$
See the regex demo. Details:
^
- start of string(?:
- start of the first non-capturing group:\d{4}-\d{4}-\d{2}
- four digits,-
, four digits,-
, two digits|
- or\d{5}-
- five digits,-
(?:
- start of the second non-capturing group:\d{3}-\d{2}
- three digits,-
, two digits|
- or\d{4}-\d{1,2}
- four digits,-
and one or two digits
)
- end of the second non-capturing group
)
- end of the first non-capturing group.$
- end of string.