Dê uma olhada no código a seguir, clicando no link:
Se você carregar o código acima e clicar no botão submit sem preencher os dados dos campos com validação, verá a tela a seguir:
Você certamente ficará impressionado quando eu mostrar a facilidade com que nós implementaremos essa validação usando HTML_QuickForm().
O código seguinte nos mostra claramente como fazer isso:
<?php
// snip
$obj_registration_form->addRule('txtAddress', 'Please enter your "Address" as it is a required field.', 'required');
$obj_registration_form->addRule('txtAddress', 'Please enter at least 20 characters in the "Address" field.', 'minlength', 20);
$obj_registration_form->addRule('txtAddress', 'Please enter at most 255 characters in the "Address" field.', 'maxlength', 255);
// snip
?>
Veja que utilizei o método addRule(), o qual falaremos mais no devido momento. Eu passei três parâmetros nesse método:
- O primeiro representa o nome do elemento a ser validado;
- O segundo é a mensagem de erro que será exibida no caso de falha;
- E a terceira é a palavra-chave associada à regra que será implementada.
Supomos que eu queira que um campo texto seja obrigatório, a palavra-chave utilizada na regra seria "required".
Existem duas regras que utilizam o 4 parâmetro, são as regras pré-definidas "maxlength" e "minlength" que precisam desses valores.
<?php
// snip
$obj_registration_form->addGroupRule('txtFullName', array ( 'txtFirstName' => array(array('Please enter your "First Name" as it is a required field', 'required')), 'txtLastName' => array(array('Please enter your "Last Name" as it is a required field', 'required'))), 'required');
$obj_registration_form->addGroupRule('txtFullName', 'Please enter only letters in your "Full Name"', 'lettersonly', 2);
// snip
?>
No caso dos elementos agrupados, nós podemos aplicar regras à eles separadamente, nesse caso deveremos aplicar as regras individualmente a cada membro do grupo chamando o método addGroupRule(). Note que temos que definir um array com as mensagens de erro bem como a regra para cada elemento que faça parte do agrupamento.
Mas é muito mais fácil atribuirmos uma regra a todos os elementos do agrupamento, Veja no código acima, especifiquei uma mensagem de erro para se exibida se qualquer um dos elementos do grupo falhar na validação. Nesse caso eu utilizei a regra "LETTERSONLY", para permitir que apenas letras sejam inseridas no campo de texto. O último parâmetro utilizado indica qual o número mínimo de elementos do grupo que devem satisfazer à regra de validação, nesse caso o valor é 2, ou seja todos os campos do grupo devem passar na validação.
Validar os elementos como drop down e radio buttons, e muito fácil como veremos no código a seguir:
<?php
// snip
$obj_registration_form->addRule('ddlCountry', 'Please select a "Country" as it is a required field.', 'required');
$obj_registration_form->addRule('txtEmailAddress', 'Please enter your "e-mail Address" as it is a required field.', 'required');
$obj_registration_form->addRule('txtEmailAddress', 'Please enter a valid "e-mail Address".', 'e-mail');
$obj_registration_form->addGroupRule('radGender', 'Please select your "Gender" as it is a required field.', 'required');
// snip
?>
Observe que para o campo de email além da regra que verifica se ele foi preenchido, existe uma regra especifica para verificar se o email é válido.
Mais regras de validação:
<?php
// snip
$obj_registration_form->addRule('txtGroupName', 'Please enter between 5 and 20 characters for your "Group Name".', 'rangelength', array(5,20));
$obj_registration_form->addRule('txtGroupName', 'Please do enter any punctuation characters in your "Group Name".', 'nopunctuation');
$obj_registration_form->addRule('txtGroupName', 'Please note that you can enter only alphabets, numbers and apostrophes for your "Group Name".', 'regex', '/^[a-zA-Z0-9\' ]{6,20}$/');
// snip
?>
O código acima demonstra algumas regras de validação. Vejamos:
- RANGELENGTH: Nos permite as escala de comprimento para o campo, definindo o valor mínimo e o valor máximo.
- NOPONTUCTUATION: Não permite que o usuário utilize qualquer caractere especial, como por exemplo "?", "!", "&" e acentuação.
- REGEX: Permite utilizar o poder das expressões regulares para validar o texto. Se a string não retornar um valor positivo a validação falha.
- COMPARE: Compara os campos de senha para testar se são idênticos.
<?php
// snip
$obj_registration_form->addElement('text', 'txtUsername', 'Username:', array( 'size' => 40, 'maxlength' => 15));
$obj_registration_form->addElement('password', 'txtPassword1', 'Password:', array( 'size' => 40, 'maxlength' => 15));
$obj_registration_form->addElement('password', 'txtPassword2', 'Re-enter Password:', array( 'size' => 40, 'maxlength' => 15));
// snip
$obj_registration_form->addRule('txtPassword1', 'Please enter your "Password" as it is a required field.', 'required');
$obj_registration_form->addRule(array('txtPassword1', 'txtPassword2'), 'The two passwords do not match. Please re-enter your password correctly.', 'compare');
$obj_registration_form->addRule('txtPassword1', 'Please enter a valid "Password" containing between 8 and 10 consisting of alphabets and numbers only.', 'regex', '/^[a-zA-Z0-9]{8,10}$/');
// snip
?>
O exemplo a que acabamos de ver implementa a validação server-side, ou seja, no lado do servidor. Veremos a seguir a possibilidade de implementar a validação do lado do cliente. Baixe o código clicando no link abaixo:
Carregue este exemplo em seu browser e clique no botão "Register" e veja que ele irá apresentar uma mensagem de erro em Javascript. Essa validação do lado do cliente é uma cortesia da mais recente atualização do pacote. Provavelmente ainda vão evoluir muito.
<?php
// snip
// validation rules come here
$obj_registration_form->addRule('txtAddress', 'Please enter your "Address" as it is a required field.', 'required', null, 'client');
$obj_registration_form->addRule('txtAddress', 'Please enter at least 20 characters in the "Address" field.', 'minlength', 20, 'client');
$obj_registration_form->addRule('txtAddress', 'Please enter at most 255 characters in the "Address" field.', 'maxlength', 255, 'client');
// snip
?>
O quinto parâmetro do método addRule() é utilizado para informar onde queremos que a validação seja feita, permite dois valores, o primeiro deles é o valor "server", que é o valor padrão e o segundo e o valor "client", usado para validar com javascript no lado do cliente.
É preciso ter em mente que a validação do lado do servidor é sempre executada, isso garante que os dados sejam validados mesmo que o usuário desative o javascript em sua máquina.