diff --git a/config/install/yamlform.yamlform.example_inputs_extras.yml b/config/install/yamlform.yamlform.example_inputs_extras.yml
index 77a7c95..ce1d4a7 100644
--- a/config/install/yamlform.yamlform.example_inputs_extras.yml
+++ b/config/install/yamlform.yamlform.example_inputs_extras.yml
@@ -167,7 +167,7 @@ inputs: |
   contrib_elements:
     '#type': details
     '#title': 'Contrib Elements'
-    '#description': 'Below are examples of custom elements provided by the <a href="https://www.drupal.org/project/captcha">CAPTCHA</a> and <a href="https://www.drupal.org/project/select_or_other">Select (or other)</a> module. <i>These elements only appear when these modules have been downloaded and installed.</i>'
+    '#description': 'Below are examples of custom elements and properties provided by the <a href="https://www.drupal.org/project/captcha">CAPTCHA</a>, <a href="https://www.drupal.org/project/select_or_other">Select (or other)</a>, and <a href="https://www.drupal.org/project/validators">Validators</a> module. <i>These elements only appear when these modules have been downloaded and installed.</i>'
     '#open': true
     # https://www.drupal.org/project/captcha
     captcha:
@@ -191,6 +191,28 @@ inputs: |
         one: one
         two: two
         three: three
+    validators:
+      '#type': details
+      '#title': 'Validators'
+      '#open': true
+      validators_email:
+        '#type': textfield
+        '#title': 'E-mail address'
+        '#validators':
+          - Email
+        '#test': 'example@example.com'
+      validators_isbn:
+        '#type': textfield
+        '#title': 'Bank account (ISBN format)'
+        '#test':
+          - '1-84356-028-3'
+          - '0-684-84328-5'
+          - '0-8044-2957-X'
+        '#validators':
+          Isbn:
+            message: |
+              This value is an invalid bank account number. Please respect the <a href="https://en.wikipedia.org/wiki/International_Standard_Book_Number">ISBN format</a>.
+
 settings:
   page: true
   page_submit_path: ''
diff --git a/docs/index.md b/docs/index.md
index 9f879c8..0661b25 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -169,6 +169,7 @@ Features
   [CAPTCHA](https://www.drupal.org/project/captcha),
   [Elements](https://www.drupal.org/project/elements),
   [Select (or other)]( https://www.drupal.org/project/select_or_other),
+  [Validators](https://www.drupal.org/project/validators),
   and more...
 
 **Submissions/Results**
diff --git a/src/YamlFormSubmissionForm.php b/src/YamlFormSubmissionForm.php
index 2b1c793..340a7a4 100755
--- a/src/YamlFormSubmissionForm.php
+++ b/src/YamlFormSubmissionForm.php
@@ -616,6 +616,25 @@ class YamlFormSubmissionForm extends ContentEntityForm {
     // Validate form via YAML form handler.
     $this->getYamlForm()->invokeHandlers('validateForm', $form, $form_state, $this->entity);
 
+    // Form validate handlers (via form['#validate']) are not called when
+    // #validate handlers are attached to the trigger element
+    // (ie submit button), so we need to manually call $form['validate']
+    // handlers to support the modules that use form['#validate'] like the
+    // validators.module.
+    // @see \Drupal\yamlform\YamlFormSubmissionForm::actions
+    // @see \Drupal\Core\Form\FormBuilder::doBuildForm
+    $trigger_element = $form_state->getTriggeringElement();
+    if (isset($trigger_element['#validate'])) {
+      $handlers = array_filter($form['#validate'], function($callback) {
+        // Remove ::validateForm to prevent a recursion.
+        return (is_array($callback) || $callback != '::validateForm');
+      });
+      // @see \Drupal\Core\Form\FormValidator::executeValidateHandlers
+      foreach ($handlers as $callback) {
+        call_user_func_array($form_state->prepareCallback($callback), [&$form, &$form_state]);
+      }
+    }
+
     // If there are validation errors try to autosave this submission.
     if ($form_state->hasAnyErrors()) {
       $this->autosave($form, $form_state);
diff --git a/tests/modules/yamlform_test/yamlform_test.module b/tests/modules/yamlform_test/yamlform_test.module
index 58f5a93..5c791c0 100755
--- a/tests/modules/yamlform_test/yamlform_test.module
+++ b/tests/modules/yamlform_test/yamlform_test.module
@@ -5,6 +5,8 @@
  * Support module for YAML form related testing.
  */
 
+use \Drupal\Core\Form\FormStateInterface;
+
 /**
  * Implements hook_theme().
  */
@@ -25,3 +27,21 @@ function yamlform_test_yamlform_options_test_alter(array &$options, array &$elem
   $options['two'] = 'two';
   $options['three'] = 'three';
 }
+
+/**
+ * Implements hook_yamlform_form_FORM_ID_alter().
+ */
+function yamlform_test_form_yamlform_submission_test_form_validate_form_alter(array &$form, FormStateInterface $form_state) {
+  $form['inputs']['custom']['#description'] = t('Field is <b>required</b> using custom validation handler.');
+  $form['#validate'][] = 'yamlform_test_form_yamlform_submission_test_form_validate_form_validate';
+}
+
+/**
+ * Implements hook_form_validate().
+ */
+function yamlform_test_form_yamlform_submission_test_form_validate_form_validate($form, FormStateInterface $form_state) {
+  if (!$form_state->getValue('custom')) {
+    $form_state->setErrorByName('custom', t('Custom input is required.'));
+  }
+}
+
