[C con Clase] Expresiones Regulares en C
Mariano Demarchi
marchi.hh en gmail.com
Vie Dic 18 00:48:38 CET 2009
Para el formato que elegiste, <caracteres alfanumericos ++ '@' ++ caracteres
alfanumericos ++ '.' ++ caracteres alfanumericos>, te podría servir:
CV es una macro que se fija si el caracter es alfanumerico, se puede cambiar
por isdigit() o cualquier otro
#define CV(x) (((x)>='a' && (x)<='z') || ((x)>='0' && (x)<='9'))
int valida(char *a)
{
char *p = a;
while(CV(*a)) a++; /* avanzo mientras sean alfanum */
if(*(a++) != '@') return 0; /* si no hay punto no es cadena valida
*/
while(CV(*a)) a++;
if(*(a++) != '.') return 0;
while(CV(*a)) a++;
if(*a) return 0; /* si hay mas caracteres en la cadena no
son alfanum asi que la cadena no es valida */
return 1;
}
Para cadenas un poco distintas, por ejemplo direcciones con subdominios, es
muy parecido, solo habría que agregar un while que contenga a la parte que
verifica hasta llegar al punto.
Saludos
El 17 de diciembre de 2009 17:56, Juan Pedro Mermoz
<jpmermoz en hotmail.com>escribió:
> Hola! Antes que nada quiero agradecer toda la ayuda que obtuve de esta
> pagina! La verdad que todo salio de 10, asi que gracias :)
>
> Quería saber si alguien me puede guiar un poco para hacer una "expresion
> regular" para validar cuando el usuario ingresa un correo electronico.
>
> Tengo una vaga idea de como hacer, utilizando sentencias while e if.. pero
> estoy medio perdido.
>
> int scanner (char *palabra)
> {
> int i=0;
>
> while ( isalpha (palabra[i]) || isdigit (palabra[i]) )
> i++;
>
> if ( palabra[i] == '@' )
> i++;
>
> while ( isalpha (palabra[i]) || isdigit (palabra[i]) )
> i++;
>
> if ( palabra[i] == '.' )
> i++;
>
> while ( isalpha (palabra[i]) )
> i++;
>
> if (strlen(palabra) == i)
> return 1;
>
> return 0;
> }
>
> Esto es más o menos lo que hice, no funciona como deberia, pero la idea
> seria que primeramente el usuario pueda ingresar cualquier caracter o
> digito, despues un arroba, despues mas digitos o caracteres, después un
> punto, y despues mas caracteres..
>
> Espero que puedan guiarme un poco!
> Gracias saludos!
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20091217/14df0909/attachment.html>
Más información sobre la lista de distribución Cconclase