[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