電子メール検証フォームAPI


9

フォームAPIでサーバー側の電子メール検証を処理する最良の方法は何ですか?
下記のフォームの一部のどこかに実装できますか、それとも他のオプションはありますか?

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

回答:


5

フォームの検証関数を作成します。これはフォームを使用した例です。たとえば、フォームコードが次の関数にあるとし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
}
?>

この関数を使用すると、フィールドに入力した値が有効かどうかを判断するカスタムコードを記述できます。フォームの送信中にカスタムコードを実行するフォームのカスタム送信関数を追加することもできます。

でフォームの検証についてもっと読む検証フォーム、でフォームを送信するフォームを送信またはフォームAPIをより良く理解するために、全体の記事を読む:フォームAPIクイックスタートガイド


2
Drupalには、非常に堅牢な検証関数も組み込まれています。api.drupal.org
api

5

フォーム検証ハンドラーをフォームに追加する代わりに、検証する必要があるフォーム要素に検証ハンドラーを追加できます。フォーム要素に適用される検証ハンドラーの配列を受け入れる#element_validateを使用します。

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

検証ハンドラは3つの引数を受け取る:フォーム要素が検証され、$form_stateそして$formフォーム要素を含むフォームの配列。検証ハンドラはform_error()またはform_set_error()を呼び出して、検証エラーを報告する必要があります。

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はカスタムプロパティではなく、Drupalプロパティです。表示コードは問題なく、Webformモジュールに対してのみ有効なソリューションを提案するものを含め、他の回答から提案されたものの有効な代替手段です。
kiamlaluno

@nmeegamaのアプローチを使用する利点の1つは、1つの大きなvalidate()にすべてを含めるのではなく、コードをより見やすくすることです。
leymannx 2013年

1
@nmeegamaのソリューションを使用するもう1つの利点は、フィールドを再検証せずに他の形式で再利用できることです。
Supriya Rajgopal 16

コードを他の場所で再利用することもできます。これは、複数の要素に対して同じ検証がある場合に便利です。
mbomb007

3

ここで説明: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.'));
}
?>

リンク先のページは、Webformモジュールのソリューションを示しています。
kiamlaluno

0

以下のように、Elementsモジュールを使用して、フォーム要素の#typeプロパティで 'emailfield'を使用することができます。

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

要素モジュールを使用するのは簡単で、単純な電子メールフィールドのカスタム検証を行うのは意味がありません。ホイールを再発明する必要はありません...


0

電子メールフィールドモジュールをインストールし、コメント16 のパッチでパッチを適用します。次に、リンクされた問題の説明のコードを使用して、組み込み検証で電子メールフィールドを定義します。

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

-1

メールアドレスはフォーム検証ハンドラーで検証できます

関数がyour_formフォームを定義している場合、デフォルトの検証ハンドラーがyour_form_validateそうであるか、そうでなければ手動で設定することもできます

 $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'))
 }
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.