For instance:
'1' => NG
'243' => NG
'1av' => OK
'pRo' => OK
'123k%' => NG
I tried with
/^(?=^[^0-9]*$)(?=[a-zA-Z0-9]+)$/
but it is not working very well.
Use
/^(?![0-9]*$)[a-zA-Z0-9]+$/
This expression has a negative lookahead to verify that the string is not only numbers. See it in action with RegExr.
So we know that there must be at least one "alphabetic" character in there somewhere:
[a-zA-Z]
And it can have any number of alphanumeric characters (including zero) either before it or after it, so we pad it with [a-zA-Z0-9]* on both sides:
/^[a-zA-Z0-9]*[a-zA-Z][a-zA-Z0-9]*$/
That should do the trick.
+ with e.g. {1,80} for a line less than 80 chars); but that said regex is a poor tool for validating length, and if possible I'd just check it directly (e.g. line.length() < 80) before matching the regex.Try with this:
/^(?!^\d*$)[a-zA-Z\d]*$/
Edit: since this is essentially the same of the accepted answer, I'll give you something different:
/^\d*[a-zA-Z][a-zA-Z\d]*$/
No lookaheads, no repeated complex group, it just verifies that there's at least one alphabetic character. This should be quite fast.
try with this: ^(?!\d+\b)[a-zA-Z\d]+$
(?!\d+\b) will avoid pure numeric, add \w+ then mix alphabet and number.
\b was a good idea. With that, the regex test fails before with unvalid strings like "123#test", because the lookahead fails first. Using $ the lookahead doesn't fail.This should do the trick, without lookbehind:
^(\d*[a-zA-Z]\d*)+$
Try this: ^[a-zA-Z0-9]*[a-zA-Z]+[a-zA-Z0-9]*$