E-Mail-Validierungsformular API


9

Was ist der beste Weg, um die serverseitige E-Mail-Validierung in der Formular-API durchzuführen?
Kann es irgendwo in einem Teil des unten beschriebenen Formulars implementiert werden oder gibt es andere Optionen?

 $form['address']['mail'] = array(
   '#type' => 'textfield',
   '#title' => t('E-mail'),
   '#required' => TRUE,
   '#default_value' => $subscription->mail,
   '#maxlength' => 255,
 ); 

 $form['submit'] = array(
   '#type' => 'submit',
   '#value' => t('Versturen'),
 );

 return $form;
}

Antworten:


5

Erstellen Sie eine Validierungsfunktion für Ihr Formular. Hier ist ein Beispiel mit Ihrem Formular. Angenommen, Ihr Formularcode befindet sich in einer Funktion namens my_email:

<?php
function my_email() {
  $form = array();

  $form['address']['mail'] = array(
   '#type' => 'textfield',
   '#title' => t('E-mail'),
   '#required' => TRUE,
   '#default_value' => $subscription->mail,
   '#maxlength' => 255,
  ); 

  $form['submit'] = array(
   '#type' => 'submit',
   '#value' => t('Versturen'),
  );

  return $form;
}

function my_email_validate($form, &$form_state) {
  // YOUR CUSTOM VALIDATION CODE GOES HERE
 if (!valid_email_address($mail)) {
   form_set_error('submitted][email_address', t('The email address appears to be invalid.'));
   }
}

function my_email_submit($form, &$form_state) {
  // YOUR CUSTOM SUBMIT CODE GOES HERE
}
?>

Mit dieser Funktion können Sie benutzerdefinierten Code schreiben, um festzustellen, ob die in Ihre Felder eingegebenen Werte gültig sind oder nicht. Sie können auch eine benutzerdefinierte Übermittlungsfunktion für Ihr Formular hinzufügen, um benutzerdefinierten Code auszuführen, während das Formular gesendet wird.

Weitere Informationen zum Validieren von Formularen finden Sie unter Validieren von Formularen , Senden von Formularen unter Senden von Formularen oder Lesen des gesamten Artikels zum besseren Verständnis der Formular-API: Formular-API-Kurzanleitung


2
Es gibt auch eine sehr robuste Validierungsfunktion, die in Drupal integriert ist: api.drupal.org/api/drupal/includes--common.inc/function/…
codexmas

5

Anstatt dem Formular einen Formularvalidierungshandler hinzuzufügen, können Sie dem zu validierenden Formularelement einen Validierungshandler hinzufügen: Verwenden Sie #element_validate , das ein Array von Validierungshandlern akzeptiert, die auf das Formularelement angewendet werden.

$form['email'] = array(
  '#type' => 'textfield',
  '#title' => 'Email',
  '#required' => TRUE,
  '#element_validate' => array('myelement_email_validate')
);

Der Validierungshandler erhält drei Argumente: Das zu validierende Formularelement, das $form_stateund das $formArray für das Formular, das das Formularelement enthält. Der Validierungshandler sollte form_error () oder form_set_error () aufrufen , um Validierungsfehler zu melden.

function myelement_email_validate($element, &$form_state, $form) {
  $value = $element['#value'];
  if (!valid_email_address($value)) {
    form_error($element, t('Please enter a valid email address.'));
  }
}

1
#element_validate ist keine benutzerdefinierte Eigenschaft, sondern eine Drupal-Eigenschaft. Der Show-Code ist in Ordnung und eine gültige Alternative zu den Antworten aus anderen Antworten, einschließlich derjenigen, die eine Lösung vorschlagen, die nur für das Webform-Modul gültig ist.
Kiamlaluno

Einer der Vorteile des Ansatzes von @ nmeegama besteht darin, dass Ihr Code viel klarer aussieht, anstatt alles in einem großen validate () zu haben.
Leymannx

1
Ein weiterer Vorteil der Verwendung der Lösung von @ nmeegama besteht darin, dass das Feld auch in anderen Formen wiederverwendet werden kann, ohne dass eine erneute Validierung erforderlich ist.
Supriya Rajgopal

Sie können den Code auch an anderer Stelle wiederverwenden. Dies ist hilfreich, wenn Sie dieselbe Validierung für mehrere Elemente haben.
mbomb007

3

Hier erklärt: http://drupal.org/node/279127

<?php
$mail = $form_values['submitted_tree']['email_address'];
if (!valid_email_address($mail)) {
  form_set_error('submitted][email_address', t('The email address appears to be invalid.'));
}
?>

Die verlinkte Seite zeigt die Lösung für das Webform-Modul.
Kiamlaluno

0

Sie können einfach das Elements- Modul und das 'emailfield' in der # type-Eigenschaft des Formularelements verwenden, genau wie folgt:

 $form['YOUR_FIELD_KEY'] = array(
    '#type' => 'emailfield',
    '#title' => t('Email'),
    '#size' => 20,
    '#maxlength' => 20,
    '#description' => t('Enter a valid email'),
    '#required' => TRUE,
  );

Nur so einfach mit Elements-Modul, benutzerdefinierte Validierung für ein einfaches E-Mail-Feld zu machen, hat keinen Sinn, Sie müssen das Rad nicht neu erfinden ...


0

Installieren Sie das E-Mail-Feld- Modul und patchen Sie es mit dem Patch in Kommentar 16. Verwenden Sie dann den Code in der Beschreibung des verknüpften Problems, um Ihr E-Mail-Feld mit integrierter Validierung zu definieren:

$form['email'] = array(
    '#type' => 'email',
    '#title' => t('Email'),
    '#required' => TRUE,
    '#default_value' => "",
    '#description' => "Please enter your email.",
    '#size' => 20,
    '#maxlength' => 20,
  );

-1

Die E-Mail-Adresse kann mit Ihrem Formularprüfungs-Handler überprüft werden

Wenn die Funktion your_formIhr Formular definiert, ist der Standard-Validierungshandler your_form_validateoder Sie können ihn auch manuell festlegen

 $form['#validate'] = array('callback_to_validate');


 function your_form_validate($form, $form_state){
   if(!filter_var($form_state['values']['mail'], FILTER_VALIDATE_EMAIL))
     form_set_error('email', t('Invalid Email Address'))
 }
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.