Java
 Computer >> コンピューター >  >> プログラミング >> Java

【Java】文字列に少なくとも1つの英数字が含まれているかを判定する正規表現プログラム


使用する正規表現

次の正規表現は、少なくとも1つの英数字(a〜z、A〜Z、0〜9)を含む文字列にマッチします。

"^.*[a-zA-Z0-9]+.*$"

それぞれの構成要素の意味は以下の通りです。

  • ^.*:文字列の先頭にマッチし、その後に0個以上の任意の文字が続くことを表します。

  • [a-zA-Z0-9]+:1個以上の英数字にマッチします。「少なくとも1つの英数字が含まれている」という条件は、この部分で実現されています。

  • .*$:0個以上の任意の文字が続き、文字列の末尾で終わることを表します。

例1:PatternクラスとMatcherクラスを使う方法

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
    public static void main(String args[]) {
        // ユーザーから文字列を読み込む
        System.out.println("文字列を入力してください");
        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine();
        // 正規表現
        String regex = "^.*[a-zA-Z0-9]+.*$";
        // 正規表現をコンパイルしてPatternオブジェクトを生成
        Pattern pattern = Pattern.compile(regex);
        // Matcherオブジェクトを取得
        Matcher matcher = pattern.matcher(input);
        if(matcher.matches()) {
            System.out.println("入力された文字列は有効です");
        } else {
            System.out.println("入力された文字列は無効です");
        }
    }
}

実行結果1

文字列を入力してください
###test123$$$
入力された文字列は有効です

実行結果2

文字列を入力してください
####$$$$
入力された文字列は無効です

例2:String.matches()メソッドを使う方法

PatternクラスとMatcherクラスを明示的に扱わなくても、Stringクラスのmatches()メソッドを使えば、より簡潔に同じ判定を行えます。

import java.util.Scanner;
public class Example {
    public static void main(String args[]) {
        // ユーザーから文字列を読み込む
        System.out.println("文字列を入力してください");
        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine();
        // 正規表現
        String regex = "^.*[a-zA-Z0-9]+.*$";
        boolean result = input.matches(regex);
        if(result) {
            System.out.println("マッチしました(有効)");
        } else {
            System.out.println("マッチしませんでした(無効)");
        }
    }
}

実行結果1

文字列を入力してください
###test123$$$
マッチしました(有効)

実行結果2

文字列を入力してください
####$$$$
マッチしませんでした(無効)

補足ポイント

matches()メソッドは「文字列全体」が正規表現に一致するかどうかを判定するため、実は先頭の ^ と末尾の $ は省略しても同じ結果になります。この手法は、パスワードやユーザーIDのバリデーションのように、入力値に英数字が1つでも含まれていることを確認したい場面で特に役立ちます。

  1. Javaの正規表現(RegEx)で非単語文字をマッチさせる方法をわかりやすく解説

    Javaの正規表現では、英字(大文字・小文字の両方)および数字(0〜9)以外のすべての文字が「非単語文字(non-word character)」として扱われます。記号や空白などがこれに該当します。こうした文字をマッチさせたい場合は、メタ文字 \W を使用します。なお、\W は文字クラス [^a-zA-Z0-9_] と同等の意味を持ちます。注意点として、アンダースコア(_)は単語文字に含まれるため、\W にはマッチしません。例1:PatternクラスとMatcherクラスを使った方法先頭から5文字がすべて非単語文字であるかどうかを判定する例です。正規表現 ^\W{5} を使って、入力文字列の冒

  2. Java正規表現(RegEx)で任意の文字にマッチさせる方法

    Javaの正規表現におけるメタ文字「.」(ドット)は、任意の1文字にマッチします。マッチ対象はアルファベットでも数字でも、記号などの特殊文字でも構いません。メタ文字「.」の基本「.」は改行文字以外のあらゆる単一文字と一致するため、パターンの柔軟性を高めたい場面で非常に便利です。なお、ドットそのもの(リテラルの「.」)にマッチさせたい場合は、バックスラッシュでエスケープして「\.」と記述します。例1:任意の1文字とのマッチ次のプログラムでは、ユーザーから入力された文字列に対して正規表現「.」を適用し、文字数をカウントしています。import java.util.Scanner; import j