API de formulário de validação de e-mail

9

Qual é a melhor maneira de lidar com a validação de email do lado do servidor na forma API?
Ele pode ser implementado em algum lugar dentro de parte do formulário descrito abaixo ou existem outras opções?

 $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
fonte

Respostas:

5

Crie uma função de validação para o seu formulário. Aqui está um exemplo usando seu formulário. Por exemplo, digamos que seu código de formulário esteja em uma função chamada 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 função permitirá que você escreva um código personalizado para determinar se os valores inseridos em seus campos são válidos ou não. Você também pode adicionar uma função de envio personalizada ao seu formulário para executar código personalizado enquanto o formulário está sendo enviado.

Leia mais sobre a validação de formulários em Validando formulários , enviando formulários em Enviando formulários ou leia o artigo inteiro para entender melhor a API de formulários : Guia de início rápido da API de formulários

Laxman13
fonte
2
Também existe uma função de validação muito robusta incorporada ao Drupal: api.drupal.org/api/drupal/includes--common.inc/function/…
codexmas
5

Em vez de adicionar um manipulador de validação de formulário ao formulário, você pode adicionar um manipulador de validação ao elemento do formulário que precisa ser validado: Use #element_validate , que aceita uma matriz de manipuladores de validação que serão aplicados ao elemento do formulário.

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

O manipulador de validação recebe três argumentos: O elemento do formulário que está sendo validado $form_statee a $formmatriz do formulário que contém o elemento do formulário. O manipulador de validação deve chamar form_error () ou form_set_error () para relatar qualquer erro de validação.

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
fonte
11
#element_validate não é uma propriedade personalizada, mas uma propriedade Drupal. O código show é bom e é uma alternativa válida ao proposto a partir de outras respostas, incluindo a que sugere uma solução válida apenas para o módulo Webform.
kiamlaluno
Uma das vantagens de usar a abordagem do @ nmeegama é que ele torna seu código muito mais claro, em vez de ter tudo em uma validação grande ().
Leymannx
11
Outra vantagem do uso da solução @ nmeegama é que o campo também pode ser reutilizado de outras formas, sem a necessidade de validar novamente.
Supriya Rajgopal
Você também pode reutilizar o código em outro lugar, o que é bom se você tiver a mesma validação para vários elementos.
mbomb007
3

Explicado aqui: 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
fonte
A página vinculada está mostrando a solução para o módulo Webform.
kiamlaluno
0

Você pode simplesmente usar o módulo Elements e usar o 'emailfield' na propriedade #type do elemento form, assim:

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

Simplesmente fácil com o módulo Elements, faça a validação personalizada para um campo de email simples não ter sentido, você não precisa reinventar a roda ...

svelandiag
fonte
0

Instale o módulo Email Field e corrija-o com o patch no comentário 16. Em seguida, use o código na descrição do problema vinculado para definir seu campo de email com a validação incorporada:

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

O endereço de e-mail pode ser validado com seu manipulador de validação de formulário

Se function your_formdefine seu formulário, o manipulador de validação padrão seria your_form_validateou você também pode configurá-lo 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
fonte