我已经制作了模块,其中我试图添加验证,如果用户输入了“电话号码”文本中的字符并且在“移动号码”上相同。
这将在用户打开用户注册表单时运行
我做了这个....
<?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 .....
请检查并发送给我重播...
这不起作用......用户输入字符时没有出现任何错误。
答案 0 :(得分:1)
您需要使用#element_validate
为每个元素或$form['#validate']
传递验证处理程序,以向表单添加验证处理程序。这就是它无法正常工作的原因。
修改强>
它不适合你的另一个原因是你错误地实现了钩子。对于钩子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
。
答案 1 :(得分: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;
}
}
这很有效.....