I am trying to create a regex pattern for name validation. Application name must have the following:
- Lowercase alphanumeric characters can be specified
- Name must start with an alphabetic character and can end with alphanumeric character
- Hyphen '-' is allowed but not as the first or last character e.g abc123, abc, abcd-1232
This is what I got [^\[a-z\] (\[a-z0-9\-\])*\[a-z0-9\]$][1] it doesn't work perfectly. The validation fails if you enter a single character in the field. How can I improve this pattern? Thank you in advance.
CodePudding user response:
You may use the following pattern:
^[a-z](?:[a-z0-9-]*[a-z0-9])?$
Explanation:
^[a-z]starts with lowercase alpha(?:turn off capture group[a-z0-9-]*zero or more alphanumeric OR dash[a-z0-9]mandatory end in alphanumeric only, if length > 1
)?make this group optional$end of input
CodePudding user response:
You are using a negated character class [^ that matches 1 character, not being any of the specified characters in the character class.
That is followed by another character class [1] which can only match 1, so the pattern matches 2 characters, like for example #1
In your examples you seem to have only a single hyphen, so if there can not be consecutive hyphens --
^[a-z][a-z0-9]*(?:-[a-z0-9] )*$
Explanation
^Start of string[a-z]Match a single char a-z[a-z0-9]*Optionally repeat any of a-z or 0-9(?:-[a-z0-9] )*Optionally repeat matching-followed by at least 1 or a-z or 0-9 (So there can not be a hyphen at the end)$End of string
