Me sucedio hace algun tiempo donde tenia una web en php sin ningun framework, y esta requeria recibir valores de distintos tipos, es decir, numeros, letras, una mezcla de los dos, etc.
Una de las soluciones mas simples seria poner una validacion por todos lados en donde lo requerimos, esto, obviamente es muy poco mantenible, ya que si por algun motivo detectamos algun error, tendriamos que buscar por todo el codigo en donde pusimos nuestras validaciones, asi que lo mas facil es centralizar una funcion unica en donde pasamos el valor y la opcion que requerimos.
La funcion que esta a continuacion «validaTipo», recibe 3 parametros:
- $numero : Podra ser un integer o un string
- $tipo : Que opcion desea ocupar
- $valor : En caso de que el valor original no sea el tipo esperado, podemos reemplazarlo por un valor por default, por ejemplo si pasamos una variable por parametro y esta es alterada podemos dejar que por defecto sea un valor 0
function validaTipo($numero, $tipo, $valor) { //Quitamos algun espacio que pudiese venir por error $numero = trim($numero); $valor = trim($valor); switch ($tipo) { case 1: //Valida si es Numero, si no es, retorna el valor pasado //Si viene 1.000, dejamos 1000 $numero = str_ireplace(".", "", $numero); if(strlen($numero) == 0 || $numero == NULL) $numero = $valor; elseif(!is_numeric($numero)) $numero = $valor; break; case 2: //Verifica nombres de la BD, no pueden ser mayor a 3 caracteres y debe ser texto //Dejamos solo las letras $numero = preg_replace('/[^A-Za-z\xF1\xD1]+/', "", $numero); if(strlen($numero) < 1 || strlen($numero) > 3) $numero = $valor; elseif(is_numeric($numero)) //Si es un numero, estaria mal, ya que solo debe recibir letras $numero = $valor; break; case 3: //Verifica texto para el Buscador, deben ser SOLO letras y/o numeros y/o un guion o espacios en blanco //Dejamos solo las letras $numero = preg_replace('/[^\xF1\xD1A-Za-z0-9- ]+/', "", $numero); if(strlen($numero) < 1) $numero = $valor; break; } //retornamos la respuesta return $numero; }//fin
Basicamente lo que hace la funcion preg_replace es buscar el patron de busqueda dado y reemplazar por el valor pasado.
Puede que te halla llamado la atencion o no, pero si te fijas en el «case 2», que solo permite texto incluimos en nuestro preg_replace lo siguiente \xF1\xD1 pero… ¿que es esto? pues muy simple, esto nos permite incluir la grandiosa ñ tanto en mayuscula como minuscula, que por defecto el valida de la A-Z, pero no incluye la ñ, con esto podremos validarla tambien, asi, si por ejemplo incluimos nuestra funcion de limpiado en un buscador, y el usuario nos ingresa año, buscara exactamente eso, si no incluyeramos esto, el resultado seria ao.
Espero les sea util, obviamente esto es solo la base, tu puedes mezclar y agregar muchos tipos mas.