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']向表单添加一个验证处理程序。这就是为什么它不起作用。

编辑:
它对你不起作用的另一个原因是你错误地实现了钩子。对于 hook hook_form_FORM_ID_alter,您需要替换hook为您的模块名称和FROM_ID表单 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 回答