Perl - Expresion Regular para Identificador

 
Vista:
sin imagen de perfil

Expresion Regular para Identificador

Publicado por Leo (5 intervenciones) el 12/01/2007 17:52:57
Buenos Días:

Soy completamente novato en esto de las expresiones regulares, y se que PERL es un lenguaje excelente para este caso. Estoy tratando de codificar una expresion regular para validar que un campo que cumpla las siguientes especificaciones.

->Comenzar con cualquier letra (A-Z a-z), número(0-9), vocales acentuadas (áéíúóÁÉÍÓÚüÜ), o con ñ o Ñ.

-> una ves que se ha capturado el primer caracter válido, se pueden continuar capturando caracteres, hasta un máximo de 29 (para completar una longitud máxima de 30 caracteres), donde además de los caracteres anteriores se pueden capturar espacios en blanco y guion bajo (_)

Ejemplo
1 -> Correcto
Úasdd 123_123 -> correcto
ÑúáÜ123452 -> correcto
_1234 -> incorrecto (no puede comenzar con _)
1234567890123456789012345678901 -> incorrecto (longitud mayor a 30 caracteres)
1"sdfdss -> incorrecto (no puede capturar caracteres especiales "#$%& etc.)

Espero que alguien me pueda dar una idea de cómo puedo hacer esto. Saludos.

Leo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Expresion Regular para Identificador

Publicado por JoaquinFerrero (25 intervenciones) el 15/01/2007 13:44:05
#!/usr/bin/perl -l

use locale;
@in = (
'1',
'Úasdd 123_123',
'ÑúáÜ123452',
'_1234',
'123456789012345678901234567890',
'1"sdfdss',
);
foreach (@in) {
print ;
print "correcto" if /^(?!_)[\w _]{1,30}$/;
}

Hay que activar el 'use locale' para que \w incluya los caracteres acentuados.

La expresión regular quiere decir: busca aquello que comienza (^) por un conjunto de entre 1 y 30 caracteres alfanuméricos, espacios o '_' pero que vengan precedidos por un '_' y nada más ($).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Expresion Regular para Identificador

Publicado por JoaquinFerrero (25 intervenciones) el 15/01/2007 13:45:01
#!/usr/bin/perl -l

use locale;
@in = (
'1',
'Úasdd 123_123',
'ÑúáÜ123452',
'_1234',
'123456789012345678901234567890',
'1"sdfdss',
);
foreach (@in) {
print ;
print "correcto" if /^(?!_)[\w _]{1,30}$/;
}

Hay que activar el 'use locale' para que \w incluya los caracteres acentuados.

La expresión regular quiere decir: busca aquello que comienza (^) por un conjunto de entre 1 y 30 caracteres alfanuméricos, espacios o '_' pero que no vengan precedidos por un '_' y nada más ($).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Expresion Regular para Identificador

Publicado por JoaquinFerrero (25 intervenciones) el 15/01/2007 13:58:37
He añadido el caso de que el texto capturado no puede empezar tampoco por un espacio en blanco:

print "correcto" if /^(?!_| )[\w _]{1,30}$/;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar