64

How can I check if a string contains only numbers and alphabets ie. is alphanumeric?

1

12 Answers 12

93

Considering you want to check for ASCII Alphanumeric characters, Try this: "^[a-zA-Z0-9]*$". Use this RegEx in String.matches(Regex), it will return true if the string is alphanumeric, else it will return false.

public boolean isAlphaNumeric(String s){
    String pattern= "^[a-zA-Z0-9]*$";
    return s.matches(pattern);
}

If it will help, read this for more details about regex: http://www.vogella.com/articles/JavaRegularExpressions/article.html

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

6 Comments

-1 as this doesn't cover all alphanumberic characters. M42's response is better.
Poor use of if, better would be return s.matches(pattern)
* allow empty string , use + , like this : ^[a-zA-Z0-9]+$
Do you really need to add the boundary matchers (^,$) at the beginning and end? It seems like String pattern="[a-zA-Z0-9]+"; would behave the same way since + is greedy.
Need regex to check if string not contain "test" and contain only alphabet and space. please help
|
30

In order to be unicode compatible:

^[\pL\pN]+$

where

\pL stands for any letter
\pN stands for any number

5 Comments

Not working. Giving: java.util.regex.PatternSyntaxException: Incorrect Unicode property near index 5.
IntelliJ also suggests \\p{Alnum} (but that's in Java 13)
@Erk I believe that has been around since Java 7: docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html
@slugmandrew, good to know. I was hedging. Seems there is one as far back as java 6. But not java 5—it doesn't even seem to have a Pattern class.
Works in Java May 2023. It's the most concise answer, yet still readable. (IntelliJ doesn't suggest change.)
18

It's 2016 or later and things have progressed. This matches Unicode alphanumeric strings:

^[\\p{IsAlphabetic}\\p{IsDigit}]+$

See the reference (section "Classes for Unicode scripts, blocks, categories and binary properties"). There's also this answer that I found helpful.

Comments

11

See the documentation of Pattern.

Assuming US-ASCII alphabet (a-z, A-Z), you could use \p{Alnum}.

A regex to check that a line contains only such characters is "^[\\p{Alnum}]*$".

That also matches empty string. To exclude empty string: "^[\\p{Alnum}]+$".

Comments

5

Use character classes:

^[[:alnum:]]*$

1 Comment

This is the right idea, but POSIX character class syntax is not valid in Java, and the question is tagged as Java. The equivalent Java syntax for your answer is "^[\\p{Alnum}]*$", as mentioned below. (If such tagging is not considered to be sufficiently conspicuous by site guidelines, let me know and I'll add a comment to the question itself. :))
4
Pattern pattern = Pattern.compile("^[a-zA-Z0-9]*$");
Matcher matcher = pattern.matcher("Teststring123");
if(matcher.matches()) {
     // yay! alphanumeric!
}

1 Comment

works flawlessly!
1

try this [0-9a-zA-Z]+ for only alpha and num with one char at-least..

may need modification so test on it

http://www.regexplanet.com/advanced/java/index.html

Pattern pattern = Pattern.compile("^[0-9a-zA-Z]+$");
Matcher matcher = pattern.matcher(phoneNumber);
if (matcher.matches()) {

}

Comments

1

To consider all Unicode letters and digits, Character.isLetterOrDigit can be used. In Java 8, this can be combined with String#codePoints and IntStream#allMatch.

boolean alphanumeric = str.codePoints().allMatch(Character::isLetterOrDigit);

Comments

1

To include [a-zA-Z0-9_], you can use \w.

So myString.matches("\\w*"). (.matches must match the entire string so ^\\w*$ is not needed. .find can match a substring)

https://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html

Comments

-1

If you want to include foreign language letters as well, you can try:

String string = "hippopotamus";
if (string.matches("^[\\p{L}0-9']+$")){
    string is alphanumeric do something here...
}

Or if you wanted to allow a specific special character, but not any others. For example for # or space, you can try:

String string = "#somehashtag";
if(string.matches("^[\\p{L}0-9'#]+$")){
    string is alphanumeric plus #, do something here...
}

Comments

-1

100% alphanumeric RegEx (it contains only alphanumeric, not even integers & characters, only alphanumeric)

For example:

special char (not allowed)
123 (not allowed)
asdf (not allowed)
1235asdf (allowed)


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

1 Comment

so a12 is not alphanumeric ?
-4

To check if a String is alphanumeric, you can use a method that goes through every character in the string and checks if it is alphanumeric.

    public static boolean isAlphaNumeric(String s){
            for(int i = 0; i < s.length(); i++){
                    char c = s.charAt(i);
                    if(!Character.isDigit(c) && !Character.isLetter(c))
                            return false;
            }
            return true;
    }

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.