diff --git a/core/lib/Drupal/Core/Form/FormBuilder.php b/core/lib/Drupal/Core/Form/FormBuilder.php
index 878967b..a3b0798 100644
--- a/core/lib/Drupal/Core/Form/FormBuilder.php
+++ b/core/lib/Drupal/Core/Form/FormBuilder.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\Core\Form;
 
+use Drupal\Component\Render\FormattableMarkup;
 use Drupal\Component\Utility\Crypt;
 use Drupal\Component\Utility\Html;
 use Drupal\Component\Utility\NestedArray;
@@ -996,6 +997,9 @@ public function doBuildForm($form_id, &$element, FormStateInterface &$form_state
       }
     }
     foreach (Element::children($element) as $key) {
+      if (preg_match('@[^a-z0-9_]+@', $key)) {
+        trigger_error(new FormattableMarkup('"@key" is an invalid form array key in the form with ID "@form_id"', ['@key' => $key, '@form_id' => $form_id]), E_USER_ERROR);
+      }
       // Prior to checking properties of child elements, their default
       // properties need to be loaded.
       if (isset($element[$key]['#type']) && empty($element[$key]['#defaults_loaded']) && ($info = $this->elementInfo->getInfo($element[$key]['#type']))) {
