---
title: "ウォークスルー:カスタム検証の作成"
slug: "walkthrough--creating-custom-validation"
abstract: "名前を検証するカスタム検証の実装例です。"
---
# ウォークスルー:カスタム検証の作成

ウェブフォームの検証は、ウェブサイト訪問者がウェブフォームのフィールドに正しい値を入力することを保証します。カスタム検証を実装するか、既存の検証に基づいて新しい検証ツールを作成することができます。このウォークスルーでは、名前を検証するカスタム検証の実装方法を説明します。有効な名前に対して、シングルラインテキストフィールドの入力文字列を検証します。

> !注このトピックではカスタム検証の作成例を提供しますが、正規表現に基づく名前検証器を作成するにはカスタム検証を作成する必要はありません。 [既存のRegularExpressionValidationを再利用](https://doc.sitecore.com/xp/ja/developers/103/sitecore-experience-manager/walkthrough--creating-a-custom-validator-based-on-the-existing-regular-expression-validation.html "Walkthrough: Creating a custom validator based on the existing regular expression validation")することで名前検証器を作成できます。

このウォークスルーでは、以下の方法を説明します:

-   検証クラスを作成します
-   検証項目を作成する
-   フィールドタイプを変更する
-   検証をフィールドエディタに追加してください

## 検証クラスを作成します

カスタム検証を作成する際は、ValidationElement<string>から継承するクラスを作成しなければなりません。

検証クラスを作成するには:

1.  NameValidationクラスを作成し、そのValidationElement<string>から継承します。
2.  Sitecore.ExperienceForms.Mvcパッケージとアセンブリを参照System.ComponentModel.DataAnnotation。
3.  サーバー検証のために Validateメソッドを実装してください。
4.  クライアント検証のために ClientValidationRules プロパティを実装してください。
5.  Initializeメソッドをオーバーライドして、検証済みモデルからプロパティ(例えばフィールドのタイトル)を初期化します。

using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Text.RegularExpressions;
using System.Web.Mvc;
using Sitecore.ExperienceForms.Mvc.Models.Fields;
using Sitecore.ExperienceForms.Mvc.Models.Validation;

namespace Sitecore.ExperienceForms.Samples.Validation
{
 public class NameValidation : ValidationElement<string>
 {
 private const string NamePattern = "^a-zA-Z \*$";

 public NameValidation(ValidationDataModel validationItem) : base(validationItem)
 {
 }

 public override IEnumerable<ModelClientValidationRule> ClientValidationRules
 {
 get
 {
 var clientValidationRule = new ModelClientValidationRule
 {
 ErrorMessage = FormatMessage(Title),
 ValidationType = "regex"
 };

 clientValidationRule.ValidationParameters.Add("pattern", NamePattern);

 yield return clientValidationRule;
 }
 }

 public string Title { get; set; }

 public override ValidationResult Validate(object value)
 {
 if (value == null)
 {
 return ValidationResult.Success;
 }

 var regex = new Regex(NamePattern, RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture | RegexOptions.Compiled);

 var stringValue = (string)value;
 if (string.IsNullOrEmpty(stringValue) || regex.IsMatch(stringValue))
 {
 return ValidationResult.Success;
 }

 return new ValidationResult(FormatMessage(Title));
 }

 public override void Initialize(object validationModel)
 {
 base.Initialize(validationModel);

 var obj = validationModel as StringInputViewModel;
 if (obj != null)
 {
 Title = obj.Title;
 }
 }
 }
}

## 検証項目を作成する

検証アイテムを作成するには:

1.  */sitecore/System/Settings/Forms/Validations*に行って。
    
2.  **Validations**を右クリックし、**Insert**をクリックし、**TemplateからInsert**をクリックします。
    
3.  /System/Forms/Validationテンプレートを選択してください。
    
4.  *Item Name*欄で*Name Validation*を入力し、「**挿入**」をクリックします。
    
    ![Insert from template dialog](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/103/sitecore-experience-manager/images/FORMS-insert-from-template.png)
    
5.  作成したアイテムに移動し、**設定** セクションの**Type**欄で値をクラスタイプ名に設定してください。
    
6.  **メッセージ**欄にエラーメッセージを入力すると、例えば無効*な名前が含まれています*。
    
    ![Error message in the Message field](<https://doc.sitecore.com/api/markdown-image/xp/ja/developers/103/sitecore-experience-manager/images/IS%20USED%20image2.png>)
    

## フィールドタイプを変更する

次に、新しい検証を使いたいフィールドタイプを変更しなければなりません。この例では、単一行のフィールドタイプに対してのみ新しい検証を使いたいです。

フィールドタイプを変更するために

1.  */sitecore/system/設定/Forms/フィールドタイプ/Basic/Single-line text*にアクセスしてください。
    
2.  設定セクションの **「許可された検証** 」フィールドで、例えば*Name validation*の新しい検証項目を選択します。
    
    ![Specify allowed validations](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/103/sitecore-experience-manager/images/FORMS-allowed-validations.png)
    

> !注同じ検証タイプに基づくバリデーターは、フォームデザイナーによってフィールド上で同時に有効化されるべきではありません。例えば、メールバリデーターと電話番号バリデーターはどちらも正規表現検証に基づいており、特定のフィールドで同時に有効化してはいけません。フォームデザイナーがフィールド上で同じタイプの検証を有効にしないように、同じタイプのバリデーターを許可された検証リストに追加しないことをお勧めします。

## 検証をフィールドエディタに追加してください

ほとんどの要素にはフィールドエディタにFieldValidationコントロールが追加されています。もしデフォルトで検証が表示されていない場合は、フィールドエディタに検証を追加できます:

> !注このウォークスルーの例では、Sitecore Rocks Visual Studioプラグインが必要です。このプラグインはVisual Studio 2019以前のバージョンに対応しています。

1.  Coreデータベースに切り替え、コンテンツエディターで /sitecore/client/Applications/FormsBuilder/Components/Layouts/PropertyGridForm/PageSettings/Settingsに移動し、検証を追加したい要素をクリックしてください。
    
2.  **ControlDefinitions**フィールドに**FieldValidation**制御定義を追加してください。Controlの定義は以下で見つけることができます:/sitecore/client/Applications/FormsBuilder/Components/Layouts/PropertyGridForm/PageSettings/Common/Validation/FieldValidation
    
    ![Specify control definition](<https://doc.sitecore.com/api/markdown-image/xp/ja/developers/103/sitecore-experience-manager/images/IS%20USED%20image4.png>)