0

ユーザーが「電話番号」テキストフィールドに文字を入力し、「モバイル番号」に同じ文字を入力した場合のように、検証を追加しようとしているモジュールを作成しました。
これは、ユーザーがユーザー登録フォームを開いたときに実行されます。
私はこれを作った....

<?php
function form_intro_form_alter($form_id,&$form){
    if($form_id == 'user_register' || $form_id == 'user_edit'){
        $form['Personal Information']['profile_pno']['#validate'] = array('form_intro_pno_validate' => array());   //profile_pno is for Phone No.
        $form['Personal Information']['profile_mno']['#validate'] = array('form_intro_mno_validate' => array());   //profile_mno is for Mobile No.
    }
}


function form_intro_pno_validate($element){
    if(!is_numeric($element['#value'])){
        form_set_error('profile_pno' , t('Please Enter Only Number in Phone no'));
    }
}

function form_intro_mno_validate($element){
    if(!is_numeric($element['#value'])){
        form_set_error('profile_mno' , t('Please Enter Only Number in Mobile no'));
    }
}
?>

モジュール名は form_intro です.....
確認して、リプレイを送ってください...
これは機能していません...ユーザーが文字を入力したときにエラーは発生しません。

4

2 に答える 2

1

#element_validate要素ごとに検証ハンドラーを渡すか$form['#validate']、フォームに検証ハンドラーを追加するには、を使用する必要があります。それが機能していない理由です。

編集:
それがうまくいかないもう1つの理由は、フックを間違って実装したことです。hook については、モジュールの名前とフォーム IDhook_form_FORM_ID_alterに置き換える必要があります。hookFROM_ID

例:

function my_module_form_intro_form_alter(&$form, &$form_state) {
  $form['#validate'][] = 'my_module_form_validation_handler';
  $form['title'] = array(
    '#type' => 'textfield',
    '#title' => t('Title'),
    '#description' => t('The title you enter here appears on the page.'),
    '#size' => 40,
    '#maxlength' => 255,
    `#element_validate` => array('my_module_element_validation_handler'),
  );
}

上記を実行my_module_form_validation_handlerすると、フォーム全体に対して関数がmy_module_element_validation_handler呼び出され、titleフォームアイテムに対して関数が呼び出されます。

于 2010-05-04T12:59:01.447 に答える
0

私はhook_userで試しました..

 <?php
    function legalagree_user($op, &$edit, &$user, $category = NULL) {
      switch($op) {
         case 'validate':
          if (!is_numeric($edit['profile_mno'])) {
form_set_error('profile_mno', t('You have to enter only numbers in Mobile No Field.'));
}
      return;

  }
}

これは機能しています.....

于 2010-05-05T05:32:12.677 に答える