[PHP] Expresiones Regulares

Estaba con un formulario de PHP que un usuario puede meter cualquier contenido, después con esta información voy a realizar una búsqueda.

Antes de realizar la búsqueda me gustaría tener algún control sobre la información que introduce el usuario.
Había pensado que sólo admita números y letras. (Eliminando posibles espacios en blanco y/o carácteres raros).

Creo que la mejor manera puede ser utilizando Expresiones Regulares para comprobar que únicamente hay números y letras; he probado con preg_replace() y preg_match() pero no consigo hacerlos funcionar.

Otra posibilidad, podría ser recorrer la información introducida por el usuario carácter a carácter y comprobar si se trata de un número o una letra, en caso contrario eliminarlo; pero creo que con la Expresión Regular pueda ser más correcto y limpio.

¿Alguien tiene alguna experiencia?

Un saludo ;)

Edito:
Con la siguiente Expresión Regular ya tengo cuando es un número o letra:
$patron = "/^[0-9a-zA-Z]+$/";

Despues aplicar preg_match y suficiente ;)

Si algún moderador quiere eliminar el hilo sin problema.
Aunque ya tienes tu solución, te añado:
Si lo único que querías era controlar que el usuario no intente cosas raras como la Inyección SQL, hay métodos para hacer segura una cadena de texto de forma que la puedes usar como parte de la sentencia SQL.
Según que extensión estes usando, pues tienesmysql_real_escape_string, mysqli_real_escape_string y para PDO se pueden usar las sentencias preparadas.
EJ:
.....
$cadenaSegura = mysqli_real_escape_string($conexion, $_POST['buscar']);
$consulta = "SELECT * FROM articulos WHERE nombre LIKE '%$cadenaSegura%' LIMIT 20";
$resultado = mysqli_query($conexion, $consulta);
While........
¿Y no es mejor validar el formulario en el lado del cliente con Javascript? Se puede hacer que compruebe al enviar o que al pulsar la tecla de un carácter no permitido directamente no se escriba y que el botón de enviar esté deshabilitado hasta que se rellenan correctamente todos los campos.

Por ejemplo:
http://www.um.es/docencia/barzana/DAWEB ... plo-1.html
http://librosweb.es/libro/javascript/ca ... tos_2.html

Salu2
@Rhaegar Totalmente de acuerdo, asi conseguiras no colapsar tanto el servidor y es una comprobación bastante rapida y sencilla con javascript.
@Rhaegar Gracias por la respuesta y la verdad que no se me había ocurrido que la validación se realizará en el cliente mediante JS cargando así menos el servidor ;)

@WaterDark Quiero realizar este control de datos en la entrada puesto que tengo una BBDD en los que algunos elementos tienen espacio, puntos etc y en realidad no son necesarios.(A la hora de buscar los elementos pues a veces encuentra, otras veces no etc. Por lo visto en su día se alimento mal la BBDD o sin ningún control). Así quería 'digamos' normalizar la entrada de datos - también me evito inyecciones SQL -. Una vez sé que el dato de entrada sé que tiene el formato correcto, me gustaría realizar la búsqueda contra la BBDD.

Actualmente NO puedo escribir/modificar los datos de la BBDD para ponerlos en el formato correcto para realizar la búsqueda contra el dato de entrada, pero pienso que se podría volcar el contenido de alguna tabla a memoria, poner este contenido en formato correcto y realizar la búsqueda contra esta información que hay en memoria.
Después ya sería saber que posición ocupa y con eso ir contra la BBDD.

¿Alguna recomendación? (Ya sé que sería recomendable modificar la BBDD y que los datos esten de forma correcta pero no tengo esa posibilidad). La BBDD no es muy pesada, por lo que volcarlo a memoria tampoco sería implanteable.

Un saludo ;)
Limitar la entrada de datos por seguridad desde el lado del cliente es un poco contraproducente, si alguien te quiere atacar sabrá enviar una petición post/get etc sin ningún problema, siempre verifica todo al final, esta bien verificarlo del lado del cliente para que en el caso de que detecte que no cumpla al patrón le de la oportunidad de cambiarlo sin esperar una respuesta del servidor.

Tienes muchas formas de añadir expresiones regulares, una de ellas es en el propio html 5 en el elemento input, http://www.w3schools.com/tags/att_input_pattern.asp
Puedes sustituir 0-9a-zA-Z por \w, es similar a [a-zA-Z_0-9], si quieres tildes y la letra Ñ debes añadirlo. Creo recordar que los rangos de las expresiones regulares siguen la tabla ascii.

Si te da por hacer mas cosas con expresiones regulares te añado la siguiente pagina, es de java pero suelen ser universales (expresiones regulares), http://chuwiki.chuidiang.org/index.php? ... es_en_Java , las "tecnicas" Greedy, reluctant y possesive

Tiene mucha historia dominarlas bien, pero ahorran bastante trabajo.
5 respuestas