views:

346

answers:

6

How do I check if a String contains only letters in java? I want to write an if statement that will return false if there is a white space, a number, a symbol or anything else other than a-z A-Z. My string must contain ONLY letters.

I thought I could do it this way, but I'm doing it wrong:

if( ereg("[a-zA-Z]+", $myString))
   return true;
else
   return false;
+2  A: 

Never heard of ereg, but I'd guess that it will match on substrings.

In that case, you want to include anchors on either end of your regexp so as to force a match on the whole string:

"^[a-zA-Z]+$"

Also, you could simplify your function to read

return ereg("^[a-zA-Z]+$", $myString);

because the if to return true or false from what's already a boolean is redundant.


Alternatively, you could match on any character that's not a letter, and return the complement of the result:

return !ereg("[^a-zA-Z]", $myString);

Note the ^ at the beginning of the character set, which inverts it. Also note that you no longer need the + after it, as a single "bad" character will cause a match.


Finally... this advice is for Java because you have a Java tag on your question. But the $ in $myString makes it look like you're dealing with, maybe Perl or PHP? Some clarification might help.

Carl Smotricz
A: 

Alternatively, try checking if it contains anything other than letters: [^A-Za-z]

Anonymouse
+2  A: 

Yeah this works fine. Thanks

if(myString.matches("^[a-zA-Z]+$"))
+1  A: 

Your code looks like PHP. It would return true if the string has a letter in it. To make sure the string has only letters you need to use the start and end anchors:

In Java you can make use of the matches method of the String class:

boolean hasOnlyLetters(String str) {
   return str.matches("^[a-zA-Z]+$");
}

In PHP the function ereg is deprecated now. You need to use the preg_match as replacement. The PHP equivalent of the above function is:

function hasOnlyLetters($str) {
   return preg_match('/^[a-z]+$/i',$str);
}
codaddict
+1  A: 

I'm going to be different and use Character.isLetter definition of what is a letter.

if (myString.matches("\\p{javaLetter}*"))

Note that this matches more than just [A-Za-z]*.

A character is considered to be a letter if its general category type, provided by Character.getType(ch), is any of the following: UPPERCASE_LETTER, LOWERCASE_LETTER, TITLECASE_LETTER, MODIFIER_LETTER, OTHER_LETTER

Not all letters have case. Many characters are letters but are neither uppercase nor lowercase nor titlecase.

The \p{javaXXX} character classes is defined in Pattern API.

polygenelubricants
A: 

The easiest way to do a "is ALL characters of a given type" is to check if ANY character is NOT of the type.

So if \W denotes a non-character, then just check for one of those.

Thorbjørn Ravn Andersen
True in general, but in Java it's usually easier to do it the other way because of the implicit anchoring of the `matches()` method. So it's `s.matches("\\w+")` vs `!s.matches(".*\\W.*")`
Alan Moore