カテゴリ: Spring 更新日: 2026/03/06

JavaのSpringで使う@Patternアノテーションを徹底解説!初心者でも理解できる正規表現バリデーション入門

Springの@Patternアノテーション
Springの@Patternアノテーション

先生と生徒の会話形式で理解しよう

生徒

「Springで入力チェックをしたいときに@Patternというアノテーションを見つけたんですが、これはどんなものなんですか?」

先生

@Patternは、文字列が正規表現に一致するかどうかをチェックするバリデーションアノテーションです。例えばメールアドレスや電話番号の形式チェックに使えます。」

生徒

「なるほど!正規表現を使えば細かいルールを設定できるんですね。」

先生

「その通りです。具体的な使い方を見ていきましょう。」

1. @Patternアノテーションとは?

1. @Patternアノテーションとは?
1. @Patternアノテーションとは?

@Patternは、JavaのJakarta Validation仕様に用意されている文字列専用の入力チェック用アノテーションです。指定した正規表現(Regex)に文字列が一致しているかどうかを自動で判定してくれるため、Spring BootやSpring MVCのフォーム入力チェックでよく使われます。

初心者の方は、「文字の並び方にルールを決めるためのアノテーション」と考えると分かりやすいでしょう。たとえば「数字だけ許可する」「ハイフン付きの郵便番号だけOK」「決まった形式のメールアドレスか確認する」といったチェックを、if文を書かずに実現できます。

実際には、次のようにフィールドの上に@Patternを付けて、regexpでルールを書くだけです。


import jakarta.validation.constraints.Pattern;

public class SampleForm {

    // 半角数字のみを許可する
    @Pattern(regexp = "^[0-9]+$", message = "数字のみで入力してください")
    private String number;

}

この例では、numberに数字以外の文字(アルファベットや記号など)が含まれているとバリデーションエラーになります。入力された値がルールに合っているかどうかを、Springが自動でチェックしてくれるのが特徴です。

@Patternは電話番号・郵便番号・会員ID・パスワードなど、「形式が決まっている文字列」のチェックと相性が良く、Webアプリケーションでは欠かせない基本的なバリデーションのひとつです。

2. 基本的な使い方

2. 基本的な使い方
2. 基本的な使い方

ここでは、@Patternの基本として「電話番号は数字だけで入力してほしい」という、よくある入力チェックを例に確認します。電話番号の欄にハイフンやスペース、全角数字が混ざると、システム側で扱いにくくなることがあるため、まずは半角数字のみに制限するのが定番です。

ポイントは、regexp(正規表現)で「許可する文字のルール」を書くことです。次の例では、^[0-9]+$で「先頭から最後まで数字だけ」という意味になります。


import jakarta.validation.constraints.Pattern;

public class UserForm {

    // 電話番号は半角数字のみ(例:09012345678)
    @Pattern(regexp = "^[0-9]+$", message = "電話番号は半角数字のみで入力してください")
    private String phone;

    // getter setter 略
}

もしphoneに「090-1234-5678」や「09012345678」のような値が入ると、ルールに合わないためバリデーションエラーになります。messageを日本語にしておくと、入力する人も「何を直せばいいか」がすぐ分かります。

なお、最初は難しく感じるかもしれませんが、@Patternは「文字列の形をそろえるための道具」です。電話番号のほかにも、郵便番号・会員ID・パスワードなど、形式が決まっている入力に同じ考え方で使えます。

3. Spring MVCでの利用方法

3. Spring MVCでの利用方法
3. Spring MVCでの利用方法

フォームやAPIで受け取った値をSpring MVCでチェックしたいときは、コントローラ側で@Validated(または@Valid)を付けるのが基本です。これだけで、フォームクラスに書いた@Patternなどのバリデーションが自動で実行されます。

初心者の方は「コントローラに入ってきた時点で、まず入力の形式チェックをする」と覚えると分かりやすいです。電話番号やメールアドレスの形式が違うまま処理を進めると、後でエラーになったり、検索や登録がうまくいかなかったりするため、入口で止めるのが安全です。


import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

@Controller
@RequestMapping("/user")
public class UserController {

    @PostMapping("/register")
    @ResponseBody
    public String register(@Validated @RequestBody UserForm form, BindingResult result) {

        // 正規表現に一致しない場合はここでエラーになる
        if (result.hasErrors()) {
            return "入力内容に誤りがあります(電話番号の形式などを確認してください)";
        }

        return "登録された電話番号: " + form.getPhone();
    }
}

この例では、UserFormphone@Patternが付いている前提です。もし「090-1234-5678」のように正規表現に合わない値が送られてきた場合、result.hasErrors()がtrueになり、登録処理に進まずメッセージを返せます。

「どの画面(どのAPI)でも同じルールで入力チェックしたい」という場面でも、フォーム側に@Pattern、コントローラ側に@Validatedという組み合わせにしておくと、コードが散らばらず整理しやすくなります。

4. よく使う正規表現の例

4. よく使う正規表現の例
4. よく使う正規表現の例

@Patternは正規表現を自由に設定できるため、用途に応じた入力チェックを作れます。初心者の方はまず「何を許可して、何を弾くのか」を決めてから、よくある形をまねするのが近道です。ここでは、フォームで特に出番が多い郵便番号・メールアドレス・英字のみの例を紹介します。

どれも「先頭から最後までこの形ならOK」という考え方で作られており、記号の意味が分からなくても、まずはコピペして試しながら慣れるのがおすすめです。

  • 郵便番号(例: 123-4567): ^\d{3}-\d{4}$
  • メールアドレス(簡易版): ^[A-Za-z0-9+_.-]+@[A-Za-z0-9.-]+$
  • アルファベットのみ: ^[A-Za-z]+$

たとえば郵便番号の^\d{3}-\d{4}$は、「数字3桁 + ハイフン + 数字4桁」の形だけを許可するという意味です。入力が「1234567」や「12-34567」だと形が違うのでエラーになります。

実際に使うときは、次のようにフィールドの上に@Patternを付ければOKです。


import jakarta.validation.constraints.Pattern;

public class AddressForm {

    // 郵便番号は 123-4567 の形式のみ
    @Pattern(regexp = "^\\d{3}-\\d{4}$", message = "郵便番号は123-4567の形式で入力してください")
    private String zip;

    // getter setter 略
}

このように「よくある正規表現」を部品として覚えておくと、電話番号や会員ID、パスワードなど別の入力チェックにも応用しやすくなります。まずは使う場面が多いパターンから慣れていきましょう。

5. エラーメッセージのカスタマイズ

5. エラーメッセージのカスタマイズ
5. エラーメッセージのカスタマイズ

@Pattern違反時のエラーメッセージはmessage属性や外部プロパティファイルで変更可能です。messages.propertiesに定義すれば、複数箇所で使える共通のエラーメッセージを設定できます。


Pattern.userForm.phone=電話番号の形式が正しくありません

このようにすることで、プロジェクト全体で統一されたメッセージを表示できます。特に大規模システムではメッセージを一元管理することが重要です。

6. 他のバリデーションとの組み合わせ

6. 他のバリデーションとの組み合わせ
6. 他のバリデーションとの組み合わせ

@Patternは他のバリデーションアノテーションと組み合わせて使うと効果的です。例えば、必須入力かつ形式チェックを行いたい場合は@NotNull@NotBlankと一緒に使います。


import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Pattern;

public class Member {
    @NotBlank
    @Pattern(regexp="^[A-Za-z0-9]{6,12}$", message="ユーザーIDは半角英数字6〜12文字で入力してください")
    private String userId;
}

この場合、空文字が送信されたり、規則に従わない文字列が送られたりすると、エラーメッセージが返されます。

7. 実際の活用シーン

7. 実際の活用シーン
7. 実際の活用シーン

@Patternは、ECサイトや会員登録フォーム、予約システムなど多くの場面で使われます。例えば、メールアドレスの形式をチェックして不正なアドレスを弾く、会員IDを英数字のみに制限する、パスワードに特定の条件を課すといった用途です。

Spring Bootと組み合わせることで、これらのチェックをサーバー側で自動的に行えるため、フロントエンドだけに依存しない堅牢なアプリケーションを作成できます。特にセキュリティやデータの整合性を重視するシステムでは欠かせない機能となります。

カテゴリの一覧へ
新着記事
New1
Java
Javaとは?仕組みと特徴、できることを初心者向けに解説!
更新記事
New2
Java
JavaのStreamクラスをやさしく解説!初心者でも分かるデータ処理の基本と活用方法
新規投稿
New3
Spring
Springの@GeneratedValueアノテーションを徹底解説!初心者でもわかる自動ID生成の使い方
更新記事
New4
Spring
Springの@Repositoryアノテーションの使い方を徹底解説!初心者でもわかるSpringフレームワークのデータアクセス
更新記事
人気記事
No.1
Java&Spring記事人気No1
Spring
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.2
Java&Spring記事人気No2
Spring
Springの@Componentアノテーションの使い方を徹底解説!初心者でもわかるSpring Boot入門
No.3
Java&Spring記事人気No3
Java
JavaのRuntimeExceptionを完全解説!初心者でもわかるjava.langパッケージの基礎
No.4
Java&Spring記事人気No4
Spring
Spring BootのJakarta移行ガイド!初心者向けjavax→jakarta変更ポイント徹底解説
No.5
Java&Spring記事人気No5
Spring
Spring BootのMultipartFile入門:ファイルアップロード・ダウンロードの実装方法と制限設定
No.6
Java&Spring記事人気No6
Thymeleaf
Thymeleafのth:classappend属性の使い方を完全ガイド!初心者でもわかる動的クラス追加
No.7
Java&Spring記事人気No7
Spring
Springの@Serviceアノテーションの使い方を徹底解説!初心者でもわかるSpring フレームワーク入門
No.8
Java&Spring記事人気No8
Spring
SpringのBindingResultを完全ガイド!初心者でもわかる入力チェックとエラー処理