Don’t want to save the duplicate data in the form? This is
very basic requirement for each type of forms,

Email id should be unique, let’s think the subscription
form, where email id is the primary key, we need to validate the unique email
id before save the form data. – “email already exists”

In this blog I will explain, how we can place the
server-side validation (email already exists) in the new Sitecore 9 forms
Let’s start with Sitecore 9 forms, open the form in the
Create the form as per your requirement and drag email field in the form:

Client validation
for Email Address

Select the email field > go to the validation section on
the right section
Checked the email validator checkbox for checking the valid
email id.
We can also change the regular expression of the default
Sitecore email validator as below:
Go to /sitecore/system/Settings/Forms/Validations/Email
In parameter field, change the value of regular expression
as below:
Add email validator in the forms email field:

Go to email field:
/sitecore/system/Settings/Forms/Field Types/Basic/Email

You can see email validator is selected under allowed
validation field as below;

All done for client-side validation, all the above settings
are by default provided by Sitecore.
Now, let’s explore the server-side validation,

Server-Side Validation – Email
already exists:

Below is the high-level algorithm for server-side

  1. Create the custom validation for forms in Sitecore
  2. Override the validation class and check if email already exists in the database through the code
  3. Assign validation to the email field
Create the custom validation for forms in Sitecore
Go to /sitecore/system/Settings/Forms/Validations
Create the Sitecore item based /sitecore/templates/System/Forms/Validation

Fill the settings section fields such as type, message,
parameters, provide custom class file name with namespace, provide custom error
message in message field and parameter if any in parameter field.

Below is the code
using Sitecore.DependencyInjection;
using Sitecore.ExperienceForms.Data;
using Sitecore.ExperienceForms.Mvc.Models.Fields;
using Sitecore.ExperienceForms.Mvc.Models.Validation;
using Sitecore.ExperienceForms.Mvc.Models.Validation.Parameters;
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;
using System.Linq;
using Sitecore.Analytics;
using Sitecore.Diagnostics;
using Sitecore.ExperienceForms.Models;
using Sitecore.ExperienceForms.Processing;
using Sitecore.ExperienceForms.Processing.Actions;
using Sitecore.XConnect;
using Sitecore.XConnect.Client;
using Sitecore.XConnect.Client.Configuration;
using Sitecore.XConnect.Collection.Model;
using Microsoft.Extensions.DependencyInjection;
using Sitecore.ExperienceForms.Data.Entities;
namespace Demo.Feature.Form.Validation
    public class EmailExistValidation :
        private IFormDataProvider _dataProvider;
        protected virtual
IFormDataProvider FormDataProvider
                IFormDataProvider formDataProvider =
                if (formDataProvider == null)
                    IFormDataProvider service =
                    IFormDataProvider formDataProvider1 =
                    this._dataProvider = service;
                    formDataProvider =
                return formDataProvider;
        public override IEnumerable<ModelClientValidationRule>
                if (string.IsNullOrEmpty(this.RegularExpression))
                    yield break;
        protected virtual string RegularExpression
        protected virtual string Title
        public EmailExistValidation(ValidationDataModel validationItem) : base(validationItem)
        public override void
object validationModel)
            object regularExpression;
stringInputViewModel = validationModel
as StringInputViewModel;
            if (stringInputViewModel != null)
                this.Title = stringInputViewModel.Title;
parameters =
            if (parameters != null)
                regularExpression =
                regularExpression = null;
            if (regularExpression == null)
                regularExpression = string.Empty;
            this.RegularExpression = (string)regularExpression;
        public override ValidationResult Validate(object value)
            if (value == null || string.IsNullOrEmpty(this.RegularExpression))
                return ValidationResult.Success;
            var formId = Guid.Parse(this.RegularExpression);
            var data = this.FormDataProvider.GetEntries(formId,
null, null);
            foreach (var item in data)
                var emailValue = item.Fields.Where(x => x.FieldName == “Emailaddress”).FirstOrDefault();
                if (emailValue != null && emailValue.Value.ToLower() ==
                    return new ValidationResult(this.FormatMessage(new object[] { this.Title }));
            return ValidationResult.Success;
Where Sitecore 9 Form data saved?
No more WFFM, all sitecore9 forms data goes to experienceforms
database in below 2 tables:

  1. Fielddata
  2. FormEntry

Now, code part is done, its configure this validation on the
form, I have created one form called subscriber form for email id as below:

This form contains only one field for email id, and we are
checking if email already exists using Sitecore9 forms.

So, when you design your form in the form section in the Sitecore,
it will create the items in the content tree under the form folder, next to content editor node, as below:

Here, we need to select the newly created validation called,
“email exist validator” in the validations section.
Now all done, let’s check the validation:

I hope this article will help you to configure the custom
error message in Sitecore 9 forms.

Happy Sitecoring.

Please connect me if you need any further information
on this implementation on Ashish Bansal

2 Replies to “Sitecore 9 Forms – Server validation – “Email already exists””

Leave a Reply

Your email address will not be published. Required fields are marked *