Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【HTML Living Standard】pattern属性の使い方

pattern属性の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

patternプロパティは、HTMLの<input>要素が受け付ける入力値の形式を定義するための正規表現を保持するプロパティです。

このプロパティ、すなわちpattern属性は、主にtypetextsearchurltelemailpasswordなどに設定された<input>要素に適用されます。ユーザーが入力した値が、このpatternプロパティに指定された正規表現のパターンに一致しない場合、ブラウザはフォームの送信を阻止し、入力フィールドにエラー状態を示します。これにより、電話番号や郵便番号、特定のユーザー名など、入力値に一貫した形式を要求する場合に、ユーザーの入力ミスを未然に防ぎ、正確なデータ収集を促進することができます。

ユーザーにわかりやすいヒントを提供するためには、patternプロパティと共にtitle属性を設定することが推奨されます。title属性に期待される入力形式の簡単な説明を記述することで、ユーザーは正規表現の知識がなくても、どのような形式で入力すべきか理解しやすくなります。

patternプロパティによる検証は、ブラウザ側で行われる「クライアントサイド検証」です。セキュリティやデータの整合性を確保するためには、悪意のある入力や不正なデータ送信を防ぐ目的で、必ずサーバーサイドでも同様の検証を行う必要があります。pattern属性は、あくまでユーザーエクスペリエンスの向上と入力作業の効率化を目的とした機能であることを理解しておくことが重要です。

公式リファレンス: HTML attribute: pattern

構文(syntax)

1<input type="text" pattern="[A-Za-z]{3}" title="3文字のアルファベットを入力してください">

引数(parameters)

引数なし

引数はありません

戻り値(return)

戻り値なし

戻り値はありません

サンプルコード

HTML pattern 属性 効かない原因と対処法

1<!--
2    HTMLのpattern属性は、入力フィールドの値が特定の正規表現に一致するかを検証します。
3    「pattern属性が効かない」と感じる主な原因と、このコードでの対処法:
4
5    1.  type属性が不適切な場合: pattern属性は 'text', 'search', 'url', 'tel', 'email', 'password' の
6        inputタイプでのみ機能します。
7        -> このサンプルコードでは 'type="text"' を使用しています。
8
9    2.  required属性がない場合: requiredがないと、空欄のまま送信できてしまい、patternバリデーションが
10        期待通りに動作しないことがあります。
11        -> このサンプルコードでは 'required' 属性を追加しています。
12
13    3.  フォームがJavaScriptで制御され、標準バリデーションがスキップされている場合:
14        JavaScriptで 'event.preventDefault()' を使用すると、ブラウザの標準バリデーションが
15        発動しません。
16        -> このサンプルコードでは標準の <button type="submit"> を使用し、ブラウザの
17           バリデーション機能を利用しています。
18
19    4.  pattern属性の正規表現が誤っている場合:
20        -> このサンプルコードでは一般的な正規表現の例を示しています。
21
22    title属性を追加すると、バリデーションエラー時にヒントメッセージが表示されることがあります
23    (ブラウザのUIに依存します)。
24-->
25<!DOCTYPE html>
26<html lang="ja">
27<head>
28    <meta charset="UTF-8">
29    <meta name="viewport" content="width=device-width, initial-scale=1.0">
30    <title>pattern属性の動作サンプル</title>
31    <style>
32        /* 見やすいように基本的なスタイルを追加 */
33        body {
34            font-family: sans-serif;
35            margin: 20px;
36        }
37        form div {
38            margin-bottom: 10px;
39        }
40        label {
41            display: inline-block;
42            width: 120px;
43        }
44        /* inputのバリデーション状態を視覚的にフィードバック */
45        input:invalid {
46            border: 1px solid red;
47        }
48        input:valid {
49            border: 1px solid green;
50        }
51    </style>
52</head>
53<body>
54    <form action="#" method="post">
55        <div>
56            <label for="username">ユーザー名:</label>
57            <input
58                type="text"
59                id="username"
60                name="username"
61                pattern="^[a-zA-Z0-9]{3,8}$"
62                title="半角英数字3文字以上8文字以下で入力してください。"
63                required
64            >
65        </div>
66        <div>
67            <button type="submit">送信</button>
68        </div>
69    </form>
70</body>
71</html>

HTMLのpattern属性は、入力フィールドに入力される値が、指定された正規表現パターンに一致するかどうかを検証するために用いられる属性です。この属性自体に特定の引数や戻り値はなく、属性値として直接正規表現を指定することで、ブラウザの標準バリデーション機能を通じて入力チェックが行われます。

pattern属性が意図通りに機能しないと感じる場合、いくつかの原因が考えられます。まず、pattern属性はtype属性がtext, search, url, tel, email, passwordのいずれかに設定されている<input>要素でのみ有効です。他のtypeでは動作しません。次に、required属性がないと、入力フィールドが空欄のまま送信され、pattern属性によるバリデーションが発動しないことがあります。また、JavaScriptを使用してフォームの送信イベントを制御し、event.preventDefault()などで標準のバリデーションをスキップしている場合も、pattern属性の検証は行われません。

このサンプルコードでは、type="text"required属性を組み合わせることで、ユーザー名の入力が必須であり、かつ特定の形式に従うように検証しています。pattern="^[a-zA-Z0-9]{3,8}$"という正規表現は、「半角英数字を3文字以上8文字以下で入力してください」という意味を持ちます。さらに、title属性を設定することで、バリデーションエラーが発生した際に、ユーザーに分かりやすいヒントメッセージを表示させることができますが、これはブラウザのユーザーインターフェースに依存します。これらの設定により、ユーザーが適切な形式でデータを入力するよう促し、入力データの品質を高めることができます。

HTMLのpattern属性は、type="text"searchurltelemailpasswordの各入力タイプでのみ機能し、required属性と組み合わせることで空欄での送信を防ぎ、期待通りに動作します。JavaScriptでフォームの送信を制御する際は、ブラウザの標準バリデーションがスキップされることがあるため、注意が必要です。pattern属性に指定する正規表現が正しいか確認し、title属性でエラー時のヒントメッセージを提供すると、利用者にとって分かりやすくなります。これらのクライアントサイドバリデーションはユーザーの利便性を高めますが、セキュリティ確保のため、必ずサーバーサイドでも同様のデータ検証を実装してください。

HTML pattern属性で正規表現による入力チェックを行う

1<!DOCTYPE html>
2<html lang="ja">
3<head>
4    <meta charset="UTF-8">
5    <meta name="viewport" content="width=device-width, initial-scale=1.0">
6    <title>HTML pattern属性サンプル</title>
7</head>
8<body>
9    <h1>郵便番号入力フォーム</h1>
10    <form>
11        <label for="zipCode">郵便番号 (例: 123-4567):</label>
12        <!--
13            pattern属性は、入力値が満たすべき正規表現を定義します。
14            この例では、3桁の数字、ハイフン、4桁の数字の形式(例: 123-4567)を要求します。
15            ^\d{3}-\d{4}$ は正規表現で、次を意味します:
16            ^        : 文字列の開始
17            \d{3}    : 任意の数字が3回続く
18            -        : ハイフン文字
19            \d{4}    : 任意の数字が4回続く
20            $        : 文字列の終了
21            
22            title属性は、入力がpatternに一致しない場合にユーザーにヒントを提供します。
23            required属性は、このフィールドが必須であることを示します。
24        -->
25        <input type="text" id="zipCode" name="zipCode"
26               pattern="^\d{3}-\d{4}$"
27               title="郵便番号は「123-4567」の形式で入力してください。"
28               required>
29        <button type="submit">送信</button>
30    </form>
31</body>
32</html>

HTMLのpattern属性は、フォームの<input>要素などに指定し、ユーザーが入力するデータの形式を検証するために使用されます。この属性は正規表現パターンを値として受け取り、ブラウザは入力値がパターンに一致するかを自動でチェックします。不一致時にはフォーム送信を阻止するなど、JavaScriptなしでクライアントサイドの入力検証を提供します。

この属性に引数や戻り値はありません。その値である正規表現が直接検証機能として働きます。

サンプルコードでは、郵便番号入力欄にpattern="^\d{3}-\d{4}$"が設定されています。この正規表現は、「数字3桁-数字4桁」(例: 123-4567)という形式を要求します。^は開始、\d{3}は3桁の数字、-はハイフン、\d{4}は4桁の数字、$は終了をそれぞれ意味します。これにより、ユーザーは正しい形式の入力を促され、title属性と組み合わせることで、パターンに合わない場合の具体的なヒントを提示できます。

pattern属性は、入力フィールドの値を特定の正規表現パターンに一致させることで、入力形式のバリデーションを行う機能です。この正規表現は、^(文字列の開始)と$(文字列の終了)で囲むことで、入力値全体がパターンに一致することを保証してください。

ユーザーが正しい入力形式を理解できるよう、title属性と併用し、具体的な入力例やヒントを提示することが非常に重要です。これにより、ユーザーエクスペリエンスが向上し、入力ミスを減らせます。

ただし、pattern属性によるバリデーションはブラウザ側で行われるクライアントサイドのチェックに過ぎません。セキュリティ確保のため、悪意のある入力や不正なデータ送信を防ぐには、必ずサーバーサイドでも同じかそれ以上の厳格なバリデーション処理を行うようにしてください。より複雑なバリデーションや詳細なエラー表示が必要な場合は、JavaScriptを併用することも検討しましょう。

関連コンテンツ