2011-11-23 20 views
54

文字列に英数字以外の文字が含まれているかどうかを知る方法が必要です。文字列に英数字以外の文字が含まれているかどうかを確認するにはどうすればよいですか?

たとえば、文字列が "abcdef?"の場合、または "abcdefà"の場合、メソッドはtrueを返す必要があります。

+1

http://stackoverflow.com/questions/1795402/java-check-a-string-if-there-is-a-special-character-in-it –

+0

http://stackoverflow.com/questions/11241690/regex-for-a-string-strict-a-string-of-strict-alphanumeric – treecoder

答えて

115

àは手紙ですので。しかし、私はそれが英数字ではないと思われると思っています。

だからではなく、正規表現を使用することもできます。

String s = "abcdefà"; 
Pattern p = Pattern.compile("[^a-zA-Z0-9]"); 
boolean hasSpecialChar = p.matcher(s).find(); 
+5

厳密に必要でない場合は、外部ライブラリをインポートしないようにしたいと思います:はい:私は非英数字と見なされたいですか? – lugeno

4

あなたは正規表現を使用することができ、文字列の各文字を通過し、代わりにCharacter.isDigit(char);またはCharacter.isletter(char);

を確認する必要があります。

+1

たとえば、 "-1234"は英数字の文字列ではなく数字です。しかし、あなたのロジックCharacter.isDigitは " - "に対してfalseを返します。 : – Abhishek

1

Apache Commonsライブラリを使用できる場合、Commons-Lang StringUtilsには、探しているものを実行するisAlphanumeric()というメソッドがあります。

!StringUtils.isAlphanumeric(String) 

Alternativlyは、文字列の文字を反復処理し、で確認してください:

!Character.isLetterOrDigit(char) 

あなたはまだ一つの問題は、残してきた: あなたの例の文字列英数字である "ABCDEFA" は、Apache Commonsのラングを使用して

21

一つのアプローチは、Stringクラス自体を使用していることを行うことです。 のは、あなたの文字列はそのような何かであることを言ってみましょう:

String s = "some text"; 
boolean hasNonAlpha = s.matches("^.*[^a-zA-Z0-9 ].*$"); 

他の1は、このようなApacheのコモンズとして、外部ライブラリを使用することです:

String s = "some text"; 
boolean hasNonAlpha = !StringUtils.isAlphanumeric(s); 
+0

+1:正規表現はここで勝者です。 –

+2

これはうまくいきません.JavaScriptの 'String.matches(...)'は、正規表現が*と一致するかどうかをチェックします。全体の文字列。 – ruakh

+1

あなたは正しいです。正規表現を修正しました – loscuropresagio

1

string.matches("^\\W*$");は、あなたが欲しいものを行う必要がありますが、それはしていません空白を含みます。 string.matches("^(?:\\W|\\s)*$");も空白と一致します。

0

Java.langのCharacterクラスのisLetter(char c)静的メソッドを使用できます。文字列が英数字の場合

public boolean isAlpha(String s) { 
    char[] charArr = s.toCharArray(); 

    for(char c : charArr) { 
     if(!Character.isLetter(c)) { 
      return false; 
     } 
    } 
    return true; 
} 
1

この機能を使用して確認する:

public boolean isAlphanumeric(String str) 
{ 
    char[] charArray = str.toCharArray(); 
    for(char c:charArray) 
    { 
     if (!Character.isLetterOrDigit(c)) 
      return false; 
    } 
    return true; 
} 

それは外部のライブラリをインポートする必要が節約され、コードが簡単にあなたが後で文字列に異なる検証チェックを行いたいはずです変更することができます。

関連する問題