Formulario de validación de correo electrónico api

9

¿Cuál es la mejor manera de manejar la validación de correo electrónico del lado del servidor en el formulario API?
¿Se puede implementar en algún lugar dentro de parte del formulario que se describe a continuación o hay otras opciones?

 $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;
}
JurgenR
fuente

Respuestas:

5

Cree una función de validación para su formulario. Aquí hay un ejemplo usando su formulario. Por ejemplo, supongamos que su código de formulario está en una función llamada 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
}
?>

Esta función le permitirá escribir código personalizado para determinar si los valores ingresados ​​en sus campos son válidos o no. También puede agregar una función de envío personalizada para que su formulario ejecute código personalizado mientras se envía el formulario.

Lea más sobre la validación de formularios en Validar formularios , envíe formularios en Enviar formularios o lea el artículo completo para una mejor comprensión de la API de formularios : Guía de inicio rápido de API de formulario

Laxman13
fuente
2
También hay una función de validación muy robusta integrada en Drupal: api.drupal.org/api/drupal/includes--common.inc/function/…
codexmas
5

En lugar de agregar un controlador de validación de formulario al formulario, puede agregar un controlador de validación al elemento de formulario que debe validarse: use #element_validate , que acepta una matriz de controladores de validación que se aplicarán al elemento de formulario.

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

El controlador de validación recibe tres argumentos: el elemento de formulario que se valida, $form_statey la $formmatriz para el formulario que contiene el elemento de formulario. El controlador de validación debe llamar a form_error () o form_set_error () para informar cualquier error de validación.

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.'));
  }
}
nmeegama
fuente
1
#element_validate no es una propiedad personalizada, sino una propiedad de Drupal. El código show está bien, y es una alternativa válida a la propuesta de otras respuestas, incluida la que sugiere una solución que solo es válida para el módulo Webform.
kiamlaluno
Una de las ventajas de usar el enfoque de @nmeegama es que hace que su código se vea mucho más claro, en lugar de tener todo en una validación grande ().
leymannx
1
Otra ventaja de usar la solución de @nmeegama es que el campo también se puede reutilizar en otras formas sin la necesidad de volver a validar.
Supriya Rajgopal
También puede reutilizar el código en otro lugar, lo cual es bueno si tiene la misma validación para varios elementos.
mbomb007
3

Explicado aquí: 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.'));
}
?>
artfulrobot
fuente
La página vinculada muestra la solución para el módulo Webform.
kiamlaluno
0

Puede usar el módulo Elementos y simplemente usar el 'campo de correo electrónico' en la propiedad #type del elemento de formulario, así:

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

Así de fácil con el módulo de elementos, hacer una validación personalizada para un campo de correo electrónico simple no tiene sentido, no tiene que reinventar la rueda ...

svelandiag
fuente
0

Instale el módulo de campo de correo electrónico y parchelo con el parche en el comentario 16. Luego use el código en la descripción del problema vinculado para definir su campo de correo electrónico con validación incorporada:

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

La dirección de correo electrónico se puede validar con su controlador de validación de formularios

Si la función your_formdefine su formulario, el controlador de validación predeterminado sería your_form_validateo de lo contrario también puede configurarlo manualmente

 $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'))
 }
Shoaib Nawaz
fuente