17

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.

7 Answers 7

30

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.

Sign up to request clarification or add additional context in comments.

1 Comment

In regexr this works but in Java using Validation @Pattern(regex="...") it doesn't work for me. Maybe this is not available in all regex implementations?
14

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.

3 Comments

Is there an easy way to limit this expression also with sting length?
@zygimantus Not this expression, no - since the total length could be split in multiple ways across the two(/three) parts of this expression. You could do it more easily with the accepted answer (replace the + 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.
Thanks for reply, yes, I thought same, to check length of a string directly in code.
4

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.

1 Comment

The second one worked, it excludes only numbers, thanks! It still doesn't exclude only alphabets.
1

try with this: ^(?!\d+\b)[a-zA-Z\d]+$
(?!\d+\b) will avoid pure numeric, add \w+ then mix alphabet and number.

3 Comments

thank you for your comment, it should change to ^(?!\d+\b)[a-zA-Z\d]+$
Well you can edit your answer. If you do, you'll get a +1 from me.
Actually no, \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.
0

This should do the trick, without lookbehind:

^(\d*[a-zA-Z]\d*)+$

1 Comment

Try without the capturing group. By the way, Javascript supports only lookaheads.
0

Try this: ^[a-zA-Z0-9]*[a-zA-Z]+[a-zA-Z0-9]*$

1 Comment

Please consider editing your post to add more explanation about what your code does and why it will solve the problem. An answer that mostly just contains code (even if it's working) usually wont help the OP to understand their problem.
0

this is strictly alphanumeric

String name="^[^a-zA-Z]\\d*[a-zA-Z][a-zA-Z\\d]*$";

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.