Field Validation

直感的な管理インターフェースを通じて、あらゆるEntityタイプに対してカスタマイズ可能なFieldバリデーションルールを提供します。

field_validation
16,416 sites
93
drupal.org

概要

Field Validationモジュールは、サイト管理者がコードを書かずにあらゆるコンテンツEntityタイプ(Node、ユーザー、Taxonomyターム等)のFieldにカスタムバリデーションルールを設定できるようにします。基本的な制約に限定されるCoreのFieldバリデーションとは異なり、このモジュールはメール検証、正規表現、ユニーク値、数値範囲などの一般的なユースケースをカバーする20種類の組み込みバリデーションルールを包括的に提供します。

このモジュールはDrupalのプラグインシステムを使用しており、開発者がカスタムバリデーションルールで拡張できます。バリデーションルールは「ルールセット」に整理され、特定のEntityタイプとBundle(バンドル)の組み合わせに関連付けられます。各ルールは特定のユーザーロールに適用するよう設定でき、他のField値に基づく条件付きロジックを含めることもできます。

このモジュールはDrupalの制約バリデーションシステムとシームレスに統合されており、バリデーションエラーはCoreのバリデーションエラーと同様にフォーム上にインラインで表示されます。また、動的なバリデーションメッセージのためにエラーメッセージやルール設定でのToken置換もサポートしています。

Features

  • 正規表現、メール、電話番号、URL、ユニーク値、数値/整数範囲、日付範囲、単語数、文字数などを含む20種類の組み込みバリデーションルールタイプ
  • EntityタイプとBundleごとにバリデーションルールセットを作成(例:記事Nodeに1つのルールセット、ページNodeに別のルールセット)
  • ロールベースのルール適用 - 特定のユーザーロールにのみ適用するルールを設定可能
  • 条件付きルール実行 - 等しい、等しくない、より大きい、より小さい、空、空でないなどの演算子を使用して、他のField値に基づいてルールを適用可能
  • 動的バリデーションのためのエラーメッセージおよび一部ルール設定でのTokenサポート
  • 一貫したエラー表示のためのDrupal Coreの制約バリデーションシステムとの統合
  • 拡張可能なプラグインアーキテクチャ - 開発者がカスタムバリデーションルールを作成可能
  • ベースFieldと設定可能Fieldの両方をサポート
  • アイテム数バリデーション付きのマルチバリューFieldサポート
  • 複雑なFieldタイプのFieldカラム選択(例:テキストFieldの'value'カラムのみを検証)

Use Cases

ユニークな商品SKUの強制

ECサイトはUniqueバリデーションルールを使用して、商品SKUのFieldがすべての商品間でユニークな値を含むことを保証できます。スコープを'Bundle'に設定してルールを設定すると、他のコンテンツタイプではなく商品のみにユニーク性を制限できます。

国別の電話番号検証

国際サイトは国固有の形式を使用して電話番号Fieldを検証できます。Phoneバリデーションルールは特定の電話番号パターンを持つ24か国をサポートし、ユーザーが正しくフォーマットされた番号を入力することを保証します。

最小コンテンツ長の必須化

編集ワークフローでは、本文Fieldに最小単語数または文字数を要求することでコンテンツ品質を強制できます。LengthおよびWordsルールにより、記事が公開前に最小コンテンツ要件を満たすことを保証できます。

ユーザー生成コンテンツでの不適切な言葉の防止

コミュニティサイトはWords Blocklistルールを使用して、ユーザーが不適切な用語やわいせつな言葉を含むコンテンツを送信することを防止できます。ブロックする単語のカンマ区切りリストを作成します。

ハニーポットによるスパム対策

CSSを使用して非表示のテキストFieldを追加し、「空でなければならない」バリデーションルールを適用します。スパムボットはすべてのFieldに入力しますが、実際のユーザーは非表示のFieldを見たり入力したりしないため、自動化されたスパム送信をブロックできます。

イベントの日付範囲検証

イベントサイトはDate Rangeルールを使用して、イベント日付が許容範囲内にあることを保証できます。サイクル機能により、イベントが特定の曜日にのみ発生することを保証するなど、繰り返しパターンの検証が可能です。

メールアドレスの確認

Equal Valuesルールを使用して、ユーザーにメールアドレスを2回入力させ、両方のエントリが一致することを保証し、メールアドレスの入力ミスを減らします。

カスタムID形式の検証

特定のID形式(例:'ABC-123-456')を持つ組織は、Patternルールを使用してこれらの形式を強制できます。簡略化されたパターン構文(a=アルファベット、9=数字、#=英数字)により、カスタムパターンを簡単に定義できます。

ロール固有のバリデーション

ユーザーロールに基づいて異なるバリデーションルールを適用します。たとえば、管理者は特定のバリデーションルールを免除され、一般ユーザーは従う必要があります。特定のロールにのみ適用するルールを設定します。

条件付きFieldバリデーション

特定の条件が満たされた場合にのみバリデーションを適用します。たとえば、ルールの条件設定を使用して、「電話で連絡」チェックボックスが選択されている場合にのみ電話番号Fieldを必須にすることができます。

Tips

  • Tokenモジュールを使用して、Field名、Entityタイプ、またはユーザー情報を含む動的なエラーメッセージを作成できます
  • 包括的なバリデーションのために同じFieldに複数のルールを組み合わせることができます(例:Length + Plain Text + Blocklist)
  • 条件機能を使用して、他のFieldが特定の値を持つ場合にのみ適用される条件付きバリデーションを作成できます
  • Drupalのコンフィグエクスポート/インポートを使用して、環境間でのデプロイのためにルールセットを設定ファイルにエクスポートできます
  • ConfigurableFieldValidationRuleBaseを拡張し、validate()メソッドを実装してカスタムバリデーションルールを作成できます
  • PatternルールはRegexよりも一般的な形式検証に簡単です - 文字には'a'、数字には'9'、英数字には'#'を使用します
  • マルチバリューFieldの場合、ほとんどのルールは各値を個別に検証します - 値の数を検証するにはItem Countを使用してください
  • ベースField(Nodeタイトルなど)もサポートされています - BundleのFieldと一緒にFieldドロップダウンに表示されます

Technical Details

Admin Pages 4
Fieldバリデーションルールセット /admin/structure/field_validation

設定されたすべてのFieldバリデーションルールセットを一覧表示します。各ルールセットは特定のEntityタイプとBundleの組み合わせに関連付けられています。このページから新しいルールセットの追加、既存のルールセットの編集、または削除ができます。

Fieldバリデーションルールセットを追加 /admin/structure/field_validation/add

対象のEntityタイプとBundleを選択して新しいバリデーションルールセットを作成します。EntityタイプとBundleの組み合わせごとに1つのルールセットのみ作成できます。

Fieldバリデーションルールセットを編集 /admin/structure/field_validation/manage/{rule_set}

ルールセット内のバリデーションルールを管理します。既存のルールの表示、並べ替え、編集、削除が可能です。利用可能なバリデーションルールタイプから新しいルールを追加します。

ルールを追加 /admin/structure/field_validation/manage/{rule_set}/add/{rule_type}

新しいバリデーションルールを設定します。すべてのルールは共通設定(Field選択、エラーメッセージ、ロール制限、条件)に加えて、ルール固有のオプションを持ちます。

権限 1
Fieldバリデーションルールを管理

Fieldバリデーションルールの設定へのアクセスを許可します。この権限は「アクセス制限」としてマークされており、信頼できる管理者ロールにのみ付与する必要があります。

Hooks 2
hook_entity_bundle_field_info_alter

Field Validationがバリデーションルールが定義されているBundleのFieldにFieldValidationConstraintを付加するために使用します。

hook_entity_base_field_info_alter

Field Validationがバリデーションルールが定義されているベースFieldにFieldValidationConstraintを付加するために使用します。

Troubleshooting 5
バリデーションルールが適用されない

ルールの追加または変更後にすべてのCacheをクリアしてください。モジュールはDrupalの制約システムを使用しており、Field定義をキャッシュします。'drush cr'を実行するか、管理UIからCacheをクリアしてください。

ルールセットを作成できない - 「このBundleにはFieldバリデーションルールセットがすでに存在します」

各Entityタイプ/Bundleの組み合わせには1つのルールセットのみ作成できます。新しいルールセットを作成する代わりに、既存のルールセットを編集してルールを追加してください。

Uniqueバリデーションが重複を許可する

「スコープ」設定を確認してください。「Entity」スコープはそのタイプのすべてのEntity間でユニーク性をチェックし、「Bundle」スコープは同じBundle内のみをチェックします。また、スコープをさらに制限する「公開済み」および「ユーザーごと」の設定も確認してください。

正規表現が機能しない

正規表現パターンにデリミタ(例:'/pattern/')が含まれていることを確認してください。Regexルールはperl互換正規表現を期待しています。オンラインのPCREテスターでパターンをテストしてください。

アイテム数バリデーションが「さらに追加」ボタンでトリガーされる

これは無制限カーディナリティのFieldに関する既知の制限です。モジュールのドキュメントでは、カスタムコードで「さらに追加」ボタンの#limit_validation_errorsを空の配列に設定することを推奨しています。

Security Notes 4
  • 「administer field validation rule set」権限は「アクセス制限」としてマークされており、信頼できる管理者にのみ付与する必要があります
  • 正規表現パターン(Regexルール)はユーザー入力で実行されます - ReDoS脆弱性を回避するためにパターンが適切にテストされていることを確認してください
  • Blocklistルールは大文字小文字を区別しないマッチングを実行します - ブロックリストが禁止用語の一般的なバリエーションをカバーしていることを確認してください
  • 「空でなければならない」ハニーポット技術はスパム防止に役立ちますが、包括的な保護のために他のスパム対策と組み合わせる必要があります