NOTA: Esta clase solo funciona si se tiene instalado PHP 5 >= 5.2.0 ya que hace uso de
FILTER_VAR
Se ha visto en muchos temas acerca de las validaciones de formularios, unos dicen que se haga con JavaScript otro que con PHP otros dicen que se debe hacer con los dos y un sin numero de opiniones, en mi caso soy participe de usar ambos métodos y desarrolle una clase sencilla para validar datos con PHP (pueden ser de formularios o de variables) y la quiero compartir con ustedes.
Es muy sencilla de utilizar y coloque comentarios para que se haga mas fácil su uso
validateForms.php
Código PHP:
Ver original<?php
class ValidarFormularios{
private $resultado;
public function __construct(){
}
// VALIDANDO CAMPOS VACIOS
public function validarVacios($campo){
if(!empty($campo) || $campo != "" or
$campo != NULL){ $resultado = TRUE;
}else{
$resultado = FALSE;
}
return $resultado;
}
// VALIDANDO CORREOS
public function validarCorreo($correo){
filter_var($correo, FILTER_VALIDATE_EMAIL
) ?
$resultado = TRUE : $resultado = FALSE; return $resultado;
}
// VALIDANDO ENTEROS
// CERO Y MENOS CERO NO SON ENTEROS VALIDOS
public function validarEnteros($entero, $min, $max){
( "min_range" => $min, "max_range" => $max)
);
filter_var($entero, FILTER_VALIDATE_INT
, $rango) ?
$resultado = TRUE : $resultado = FALSE; return $resultado;
}
// VALIDANDO BOLEANOS
// RETORNA TRUE PARA 1, TRUE, ON, YES
// EN OTROS CASOS RETORNARA FALSE
public function validarBoleanos($boleano){
filter_var($boleano, FILTER_VALIDATE_BOOLEAN
) ?
$resultado = TRUE : $resultado = FALSE; return $resultado;
}
// VALIDANDO NUMEROS DE PUNTO FLOTANTE (DECIMALES)
public function validarFlotante($flotante){
$separador = array('options' => array('decimal' => ','));
// si se quiere usar un numero con miles y punto flotante (1.238,32) se usa esta condicion
// (!filter_var($flotante, FILTER_VALIDATE_FLOAT, array('options' => array('decimal' => ','), 'flags' => FILTER_FLAG_ALLOW_THOUSAND)))
filter_var($flotante, FILTER_VALIDATE_FLOAT
, $separador) ?
$resultado = TRUE : $resultado = FALSE; return $resultado;
}
// VALIDANDO UNA IP
// en version se le debe pasar como parametro el tipo de ip FILTER_FLAG_IPV4 - FILTER_FLAG_IPV6
public function validarIP($ip, $version){
filter_var($ip, FILTER_VALIDATE_IP
, $version) ?
$resultado = TRUE : $resultado = FALSE; return $resultado;
}
// VALIDANDO CON EXPRESIONES REGULARES
// VERIFICA QUE EL CONTENIDO CONCUERDE CON LA EXPRESION REGULAR
/*
$expresion = '/^M(.*)/';
si se le pasa una cadena de texto que comience con M el resultado sera positivo
*/
public function ValidarExpRegular($contenido, $expresion){
// para pasarle las opciones al filtro
$opcion = array("options" => array("regexp" => $expresion));
filter_var($contenido, FILTER_VALIDATE_REGEXP
, $opcion) ?
$resultado = TRUE : $resultado = FALSE; return $resultado;
}
// VALIDANDO UNA URL
/*
$opcion =
FILTER_FLAG_SCHEME_REQUIRED - ejemplo: http://pagina
FILTER_FLAG_SCHEME_REQUIRED - ejemplo: http://www.pagina.com
FILTER_FLAG_PATH_REQUIRED - ejemplo: www.example.com/example1/test2/
FILTER_FLAG_QUERY_REQUIRED - ejmemplo: pagina.php?nombre=Juan&edad=37
*/
public function validarURL($url, $opcion){
filter_var($url, FILTER_VALIDATE_URL
, $opcion) ?
$resultado = TRUE : $resultado = FALSE; return $resultado;
}
// VALIDANDO QUE UN CAMPO EXISTA SI OTRO ESTA DEFINIDO Y CON UN VALOR
/*
si el campo 1 existe y tiene un valor, validar el numero 2
$validar tendra el filtro que se quiere aplicar
$campo2 es el campo que se quiere validar
*/
public function validarDosCampos($campo1, $valor, $validar, $campo2){
if(isset($campo1) && $campo1 == $valor){ switch($validar){
case 'FILTER_VALIDATE_BOOLEAN':
filter_var($campo2, FILTER_VALIDATE_BOOLEAN
) ?
$resultado = TRUE : $resultado = FALSE; break;
case 'FILTER_VALIDATE_EMAIL':
filter_var($campo2, FILTER_VALIDATE_EMAIL
) ?
$resultado = TRUE : $resultado = FALSE; break;
case 'FILTER_VALIDATE_FLOAT':
$separador = array('options' => array('decimal' => ',')); filter_var($campo2, FILTER_VALIDATE_FLOAT
, $separador) ?
$resultado = TRUE : $resultado = FALSE; break;
case 'FILTER_VALIDATE_INT':
filter_var($campo2, FILTER_VALIDATE_INT
) ?
$resultado = TRUE : $resultado = FALSE; break;
case 'FILTER_VALIDATE_IP':
filter_var($campo2, FILTER_VALIDATE_IP
) ?
$resultado = TRUE : $resultado = FALSE; break;
case 'FILTER_VALIDATE_REGEXP':
filter_var($contenido, FILTER_VALIDATE_REGEXP
, array("options"=>array("regexp"=>"/^M(.*)/"))) ?
$resultado = TRUE : $resultado = FALSE; break;
case 'FILTER_VALIDATE_URL':
filter_var($url, FILTER_VALIDATE_URL
) ?
$resultado = TRUE : $resultado = FALSE; break;
default:
$resultado = FALSE;
break;
}
}else{
$resultado = FALSE;
}
return $resultado;
}
}
?>
Unos ejemplos de su uso:
probando.php
Código PHP:
Ver original<?php
/* USANDO LA CLASE */
require_once('validateForms.php');
$objt = new ValidarFormularios;
// VALIDANDO QUE NO ESTE VACIO
// imprime 'El contenido SI esta vacio' porque $contenido no tiene nada de nada
$contenido = "";
if ($objt->ValidarVacios($contenido) === TRUE){
echo 'El contenido NO esta vacio <br />';
}else{
echo 'El contenido SI esta vacio <br />';
}
// VALIDANDO CORREOS
// imprime 'El contenido SI es un correo electronico' porque contenido tiene un mail valido
if ($objt->ValidarCorreo($contenido) === TRUE){
echo 'El contenido SI es un correo electronico <br />';
}else{
echo 'El contenido NO es un correo electronico <br />';
}
// VALIDANDO ENTEROS
// imprime 'El contenido NO es un entero valido' ya que 1 si es entero pero este no esta en el rango del 2 al 99
$contenido = "1";
if ($objt->validarEnteros($contenido, 2, 99) === TRUE){
echo 'El contenido SI es un entero valido <br />';
}else{
echo 'El contenido NO es un entero valido <br />';
}
// VALIDANDO BOLEANOS
// imprime echo 'El contenido SI es un boleano' ya que YES esta dentro de los paramentros de un boleano
$contenido = "YES";
if ($objt->validarBoleanos($contenido) === TRUE){
echo 'El contenido SI es un boleano <br />';
}else{
echo 'El contenido NO es un boleano <br />';
}
// VALIDANDO NUMEROS DE PUNTO FLOTANTE (DECIMALES)
// imprime echo 'El contenido NO es un decimal' ya que dentro de las opciones colocamos que el separador de decimales es la coma
$contenido = "1.23";
if ($objt->validarFlotante($contenido) === TRUE){
echo 'El contenido SI es un decimal <br />';
}else{
echo 'El contenido NO es un decimal <br />';
}
// VALIDANDO UNA IP
// imprime 'El contenido SI es una direccion IP' ya que la direccion IP es valida y es version 4
$contenido = "192.168.0.1";
if ($objt->validarIP($contenido, 'FILTER_FLAG_IPV4') === TRUE){
echo 'El contenido SI es una direccion IP <br />';
}else{
echo 'El contenido NO es una direccion IP <br />';
}
// VALIDANDO CON EXPRESIONES REGULARES
// imprime 'El contenido NO empieza con la letra M' ya que Papa empieza con P
$contenido = "Papa";
if ($objt->ValidarExpRegular($contenido, '/^M(.*)/') === TRUE){
echo 'El contenido SI empieza con la letra M <br />';
}else{
echo 'El contenido NO empieza con la letra M <br />';
}
// VALIDANDO UNA URL
// imprime 'El contenido SI es una URL valida' ya que contenido si es valido
$contenido = "http://www.prueba.com";
if ($objt->ValidarURL($contenido, 'FILTER_FLAG_SCHEME_REQUIRED') === TRUE){
echo 'El contenido SI es una URL valida <br />';
}else{
echo 'El contenido NO es una URL valida <br />';
}
// VALIDANDO QUE UN CAMPO EXISTA SI OTRO ESTA DEFINIDO Y CON UN VALOR
$contenido1 = "1";
$contenido2 = "1238";
if ($objt->validarDosCampos($contenido1, 1, 'FILTER_VALIDATE_INT', $contenido2) === TRUE){
echo 'El contenido2 si es un numero entero <br />';
}else{
echo 'El contenido2 NO es un numero entero <br />';
}
?>
Espero que les sirva, cualquier comentario actualización o mejora sera bienvenida.
Juan Esteban