Need to have alphanumeric string separated by comma (needed) and/or space(not required to have it but user can enter and that is acceptable)
So, "ab1c,def2, efg657hi" is fine. Prefer no leading trailing , or space, but not a show stopper
I have the following but don't think it's complete.
[0-9a-zA-Z]? (,\s[0-9a-zA-Z] )*
CodePudding user response:
The pattern [0-9a-zA-Z]? (,\s[0-9a-zA-Z] )*
that you tried uses a possessive quantifier ?
which means it either matches 1 character or no character, but when it matches it does not allow for backtracking.
As the second part is optional (,\s[0-9a-zA-Z] )*
the whole pattern can also match an empty string or for example a leading comma , abd
To make the pattern match the whole string, you can add anchors to prevent partial matches, and repeat the leading character class 1 or more times.
If you also want to allow for optional whitespace chars before the comma you can add another \s*
before it:
^[0-9a-zA-Z] (?:\s*,\s*[0-9a-zA-Z] )*$
See a regex demo.
Note that \s
can also match a newline.
CodePudding user response:
Need to have alphanumeric string separated by comma (needed) and/or space (not required to have it but user can enter and that is acceptable)
I'd advise:
^(?!.*_)\w (?:,? ?\w )*$
See an online demo
^
- Start string anchor.(?!.*_)
- Negative lookahead to prevent 0 characters and underscore.\w
- 1 Word-characters, short for[0-9a-zA-Z_]
.(?:
- Open non-capture group:,? ?
- Optional comma and optional space to allow for all variations mentioned, e.g. comma and/or space (not required).\w
- 1 Word-characters, short for[0-9a-zA-Z_]
.)*
- Close non-capture group and match 0 times.
$
- End string anchor.
Note that you could remove the negative lookahead and use the extended character class instead of \w
.