Ver Mensaje Individual
  #11 (permalink)  
Antiguo 22/06/2009, 10:01
Avatar de acoevil
acoevil
 
Fecha de Ingreso: julio-2008
Ubicación: localhost/colombia/sevillaValle.php
Mensajes: 1.123
Antigüedad: 16 años, 6 meses
Puntos: 32
Respuesta: Cansao de buscar algo para validar CIF, (Ayuda)

Con expresiones regulares lograrias lo que propones como lo dijo abimaelrc mas arriba
Aqui


Aqui un pequeño manual de como usarlas ( lo saque de una web no es mio )


Las expresiones regulares son unas de las herramientas mas utiles con las cuales puede contar un programador, cuando se trata de procesar textos. Sirven para definir un patron de caracteres que puede ser buscado dentro de un texto, y una vez encontrado dentro del texto podemos extraer o reemplazar partes de este. Por ahora parece algo muy estupido como para tener en cuenta, pero les puedo asegurar que es mucho mas que buscar y reemplazar. Seguramente los usuarios de Unix o Linux conocen las expresiones regulares ya que gran cantidad de las herramientas de estos sistemas operativos las utilizan.

Como no podia faltar, en PHP existen funciones que implementan expresiones regulares, para ser mas precisos son 2 paquetes de funciones, uno que es (casi) compatible con las expresiones regulares de Perl, y otro que es compatible con POSIX, el estandard usado en Unix. Yo voy a utilizar el paquete compatible con Perl, porque tiene algunas funciones mas que el otro, es mas rapido, y porque me gusta mas . Igual las diferencias no son muchas, asi que las ideas basicas se pueden aplicar usando tanto uno u otro paquete.

Una expresion regular se define textualmente, el patron se encierra entre caracteres especiales denominados delimitadores. Tradicionalmente el caracter delimitador es "/", por lo tanto una expresion regular tiene esta pinta: "/..../". Despues del segundo caracter delimitador se pueden incluir ciertos caracteres que cambian la forma en que se ejecuta el patron, estos se los llama modifadores. Por ejemplo el modificador "i" se utiliza para decir que un patron es "case insensitive", o sea, que no distingue entre mayusculas y minusculas. Segun tengo entendido se puede usar otro caracter aparte de "/" como delimitador siempre y cuando este no sea un numero o un caracter del alfabeto.

Existen ademas varios caracteres con significado especial, entre estos el simbolo "$" que tambien tiene un significado especial para PHP si lo usamos entre comillas dobles, por eso recomiendo usar comillas simples al definir una expresion regular en PHP. Para quitarle el significado especial a uno de estos caracteres se debe anteponer la barra invertida "\". Existen tambien ciertos caracteres especiales que se escriben usando la barra invertida, por ejemplo el salto de linea "\n", el tabulador "\t", o la misma barra invertida "\\" (hay que escribirla asi para no confundirla con algun caracter especial).

Ahora PHP tambien usa la barra invertida para ciertos caracteres especiales al definir textos, por ejemplo , si escribimos "\n" en PHP (notese las comillas dobles), estamos indicando un texto con un salto de linea. Pero si escribimos '\n' (con comillas simples), lo que estamos indicando es el texto "\n". Dentro de las comillas simples solo existen 2 caracteres especiales que se escriben con la barra invertida, '\'' la comilla simple, y '\\' la barra invertida. Esto puede ser bastante confuso y por lo comun trae problemas ya que a veces lo que escribimos en codigo PHP no resulta ser lo que queremos, pero es mejor ver esto antes de empezar, pero si estan impacientes pueden saltear esto y volver cuando las cosas que prueben empiezen a fallar por razones desconocidas.

Veamos algunos casos en que la barra invertida nos puede traer dolores de cabeza:

Código:

// Queriamos escribir un patron que contenga al caracter delimitador "/", como
// este es especial le tenemos que poner adelante "\"

$patron = "/\//";

// Pero aca lo que va a pasar es que las comillas dobles le quitan la barra
// invertida y $patron queda "///", lo que va a provocar un error al usarlo
// como expresion regular. Deberiamos usar:

$patron = "/\\//";
$patron = '/\//';

// Queriamos escribir un patron que contenga una barra invertida, tenemos
// que escribirla "\\"

$patron = '/\\/';

// Pero \\ es especial para las comillas simples y $patron se convierte en
// "/\/", y al usarla como expresion regular nos va a decir que falta el
// delimitador final, ya que "\/" no se considera limitador
// Deberiamos escribirlo asi:

$patron = '/\\\\/';




Para poder probar las cosas que aprendemos aca lo mejor es conocer como ejecutar un expresion regular (lo que comunmente se denomina "matchear" una expresion regular). Para eso veamos 2 funciones basicas para el uso de expresiones regulares en PHP: preg_match y preg_replace. Por ahora solo vamos a ver como es el funcionamiento basico, o sea, lo que necesitamos saber para probar las expresiones regulares.

La funcion preg_match recibe en el primer parametro la expresion regular y en el segundo parametro el texto donde matchearla, y nos devuelve un 1 si matchea, un 0 si no, o false si ocurrio un error (si ocurre un error va a mostrar un warning).

La funcion preg_replace recibe en el primer parametro la expresion regular, en el segundo el texto a usar para reemplazar, y en el tercer parametro el texto donde matchear la expresion regular. La funcion devuelve el texto donde se reemplaza todos los matches de la expresion por el texto indicado.

Ahora veamos como armar nuestra primer expresion regular.

Un patron puede estar conformado por una secuencia de caracteres que no tengan significado especial, estos se van a matchear tal cual. En otras palabras podemos crear un patron para buscar un texto determinado: