Cristalab

                 ¿Quieres registrarte?

Expresiones Regulares en ActionScript 3. Tip 1

Por: shogoki
13 de Noviembre del 2006
235 de clabLevel
Otros artículos de shogoki
19,517 visitas

Las expresiones regulares son una poderosa y estandarizada forma de buscar y reemplazar texto con complejos patrones de caracteres. A los que las han usado expresiones regulares (ER de ahora en adelante) en otros lenguajes (como Python), la sintaxis le parecerá muy similar. Este tutorial es para Actionscript 3, pero funciona para muchos otros lenguajes, como PHP o Perl.

Para ver como trabajan las ER (Expresiones Regulares) realizaremos una clase para verificar la correcta escritura de Números Romanos.

En los Números Romanos, hay 7 caracteres que son repetidos y combinados en varias formas para representar números:

Las siguientes son algunas reglas generales que debemos tener en cuenta al construir números romanos:

Empecemos con la clase, crea un archivo .as y nómbralo Roman.as y coloca el siguiente código:

Código :

package clases{
     public class Roman{
      private var pattern:RegExp = /^M?M?M?$/;
      
      function Roman(){
         //Constructor de la clase
      }
      
      public function ValidarRomano(romano:String):Boolean{
         return pattern.test(romano);
      }
     }   
}
La variable pattern es donde se almacenara el patrón de la ER, en ActionScript 3 hay dos formas de crear una expresión regular. La primera es colocando entre 2 slash el patrón a verificar, la otra forma seria instanciando la clase RegExp mendiante new:

Código :

pattern:RegExp = new RegExp("^M?M?M?$", "");

Seguidamente tenemos la función ValidarRomano(), alli usamos el método test() que devuelve true o false, si el String cumple o no el patrón.

Pongamos atención ahora en la variable pattern, vemos que comienza con el metacaracter ^, con esto le estamos diciendo a la ER que lo que sigue coincida sólo con el comienzo de la cadena. Tenemos M? para buscar la aparición de 0 ó una M. Se repite 3 veces que como ya vimos es la máxima cantidad de veces que dicho carácter puede repetirse, al final colocamos $ para que lo anterior preceda sólo al fin de la cadena. Cuando se combina con el carácter ^ al principio, significa que el patrón debe coincidir con la cadena al completo, sin otros caracteres antes o después de las M.

Abre un archivo .fla, nombrado testRoman.fla y guárdalo en la misma carpeta donde guardaste la clase y coloca las siguientes líneas de código

Código :

import Roman

var regExp:Roman = new Roman();

trace(regExp.ValidarRomano("M")); 
trace(regExp.ValidarRomano("MM"));
trace(regExp.ValidarRomano("MMM"));
trace(regExp.ValidarRomano("MMMM"));
trace(regExp.ValidarRomano(""));

Al ejecutarlo veremos que las 3 primeras cumplen con el patrón y por ende devuelven true, la cuarta debido a que el carácter M se repite cuatro veces no cumple con la condición y arroja false y como dato curioso si pasamos una cadena en blanco devuelve true, esto es debido a que en la condición las M son opcionales. Por ahora tenemos el chequeo de los miles listo, pasemos a las centenas.

Para Las centenas hay 4 posibles patrones a verificar:

Las ultimas 2 pueden combinarse como una D opcional seguida de 0 a 3 caracteres C. Para la nueva validación modifica la variable pattern de la siguiente forma:

Código :

pattern:RegExp = /^M?M?M?(CM|CD|D?C?C?C?)$/;

Concentrémonos en lo nuevo que se halla dentro de lo paréntesis, en el definimos 3 condiciones mutuamente exclusivas separadas por una barra vertical (|), con esto estamos buscamos la aparición de CM ó CD ó una D opcional, seguida de 0 a 3 caracteres. Para probarlo copia en tu archivo .fla lo siguiente:

Código :

trace(regExp.ValidarRomano("MCM"));
trace(regExp.ValidarRomano("MD"));
trace(regExp.ValidarRomano("MMMCCC"));
trace(regExp.ValidarRomano("MCMC"));
trace(regExp.ValidarRomano(""));

Para la validación de las decenas y unidades el patrón es muy similar al de los centenas:

Código :

pattern:RegExp = /^M?M?M?(CM|CD|D?C?C?C?)(XC|XL|L?X?X?X?)(IX|IV|V?I?I?I?)$/;

Ahora solo resta optimizar el patrón, para ello usaremos la metasecuencia {n,m}. En ActionScript las metasecuencias son secuencias de caracteres con un significado especial dentro del patrón de la ER. La metasecuencia {n,m} buscara la aparición de un elemento de 'n' a 'm' veces.

Al final la clase completa se vería de la siguiente forma:

Código :

package {
     public class Roman{
      private var pattern:RegExp = /^M{0,3}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/;
      
      function Roman(){
         //Constructor de la clase
      }
      
      public function ValidarRomano(romano:String):Boolean{
         return pattern.test(romano);
      }
     }   
}

Con esto quedaría listo. En los archivos de descarga podrás encontrar la clase y un ejemplo .fla de su utilización.

En el próximo tip sobre Expresiones Regulares, hablare sobre los flags, los grupos con nombre y veremos una utilización más avanzada de las ER.
[Ve Ejemplo] [Descarga Ejemplo .FLA]


Artículos Relacionados


Etiquetas actionscript_3

Comentarios | Enviar un comentario
Ya empiezan a aparecer más y más Tips de Flex, son voces que hablan del nuevo cambio que ha de venirnos U_U

Genial por el Tip :)
Por: MorphX
Gran Tip (y)
Realmente me servirá de mucho.
¿Puedes poner cómo serían todos los operadores lógicos (AND, XOR, NOT, ect)? :)
Por: Zah
Operadores lógicos como tal no hay, solo meta caracteres que dependiendo de como los usemos nos darían esa función. Por ejemplo si quiero usar el operador AND(&&) para verificar un texto que comience por Hola y termine en Shogoki, sin importar la cantidad de palabras que tenga en medio, tendría algo como esto:

Código :

var pattern:RegExp = /^Hola\D*Shogoki$/i

trace(pattern.test("Hola, como estas Shogoki")) //true
trace(pattern.test("Hola!!! Shogoki")) //true
trace(pattern.test("hola espero que estés bien shogoki")) // true
trace(pattern.test("Hola")) //false



De todos el único que arroja false es el ultimo debido a que le falta la frase Shogoki al final. Ademas gracias al flag "i" que colocamos al final , acepta tanto mayúsculas como minúsculas
Por: shogoki
Aquí hay una buena referencia sobre expresiones regulares en Java (iguales que en as3)
Por: Zah
Ahora sí, quedó más bonito. Ya está en portada.
Por: Freddie
ya estudie division de 0 , multiplos y estoy estuduando numeros romanos me falta estudiar descomponer
Por: candelaria_blog
los mumeros son muy dificiles para encontrar y sobre todo en letra
Por: glenda_blog
no sirven
Por: pedro_blog
aqui nunca hay nada tienen que poner los numeros romano del uno al infinito solamente esta asta el 1,000 mas nada que paso halli con ustedes tienen que pones calidad no eso que pusieron miren que se lo estoy dieciendo nunca yo e visto wikiopedia a cometido ese error esa empresa le esta ganando mire que se lo estoy diciendo los niños siempre buescan esa informacion que los maestro estaasiendo esas investigacienes
Por: yulisa_blog

yulisa_blog :

aqui nunca hay nada tienen que poner los numeros romano del uno al infinito solamente esta asta el 1,000 mas nada que paso halli con ustedes tienen que pones calidad no eso que pusieron miren que se lo estoy dieciendo nunca yo e visto wikiopedia a cometido ese error esa empresa le esta ganando mire que se lo estoy diciendo los niños siempre buescan esa informacion que los maestro estaasiendo esas investigacienes
Chile buses dos pisos?
Por: Freddie
esto es una mierda por que yo pongo numeros del 1 asta 1000 mesale solo lo que pasa sale 1 ,el 5 ,10 ,50, 100
Por: anddrea_blog
pongan todos los numeros en romano
esta bien su informacion
pero les falta agregar los demas numeros
Por: claudia _blog
LOS NUMEROS ROMANOS MXCLXVII 1997
27 XXVII
Por: paola valentina_blog
no lo entiendo paranada
Por: yuyi_blog
tienen que escribir sin que falte un numero romano del 1 al 10000
Por: victor-blog
Me gusto tu information grasias.
Por: yolanda-blog
quiero buscar 50 verbos regulares
Por: kevin-blog
1997 = MCMXCVII
2305 = MMCCCV

MI PREGUNTAS... 5000?
10000?
50000?
100000?
500000?
1000000?
5000000?

Yo creo recordar de la época del colegio, que para estas cantidades que los romanos normalmente no usaban, al poner uno o varios guiones encima de la M o la D multiplicabas el valor de esta x 1000 por cada guion superpuesto... pero no estoy muy seguro... (no se porqué no lo miro en la wikipedia, es que me ha dado nostalgia del cole)

ej:

1.500.000 = MD(con 1 guión encima)(cada guión sería como añadir 3 ceros al final del resultado en decimal)

7.845.439 = D(con 2 - encima) MMDCCCXLV(con 1 - encima)CDXXXIX. el numerico sería asi de largo creo yo:
--D-MMDCCCXLV.CDXXXIX (con los guiones encima y sin el punto)

aunque ya os digo... no estoy seguro del todo
Por: meidyn-blog
pz kual es
la maxima kantidad
ke
se
puede
poner
en numeres

Romanoz
Por: gera-blog
hola yo tampoco veo claro como es eso de los numeros como 50000
Por: MAGNOLIA-blog
quiero que me presenten los numeros romanos del uno al mil
Por: naiomi-blog
qui ero saber mas sobre los numeros romanos
Por: german daniel moreno tore
espero que los usua rios eesten conformes por que yo no lo estoy
Por: yulimar -blog
quiero los numeros romanos del 1 hasta el 50
Por: albany gacia-blog
son jeniales y faciles ejempla:6000=vm
Por: lupita -blog
como se escriben los nueros romanos del uno al 1000
Por: isis bustillo-blog
pues yo de este código no me enterado de ná
Por: un lerdo-blog
QUIERO LOS NUMEROS DEL 1 AL 5000
Por: BRIGITTE-blog
NESESITO LOS NUMEROS ROMANOS DEL 1 5000 POR FABOR
Por: LUISA -blog
megustaria quefueran mas explicitos con las tareas que se preguntan.
gracias
Por: beatriz bello peinado-blo
me parese que esta pagina no sale nada concreto de lo que yo necesito gracias
Por: diana -blog
mira quiero saber los numeros romanos de 1000 en 1000 al 10000
Por: lola-blog
CHUPAME BIEN LA CONCHA PUTOS DE UNA PAGA
Por: PETE-blog
PORQUE NO ME ASES UN BUEN PT CARA DE MANI IJO DE PUTA LA RREEEEEEEE CONCHA DE TU MADREEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEPUTS MAL COJJJIDOSSSSSSSSSSSSSSSSSSSSSSSS JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA CHUPA CONHA EL QUE MIRA LO QUE ESCRIBI ES UN PTRO
Por: AGUANT ELPT-blog
chupame la panocha es lo que dedes de aser
Por: mi nompre da ser ´pu
malditoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo pudreteeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee perooooooooooooooooooo recontracoñuetumadreeeeeeeeeeeeeeeeeeeeeee
Por: 3v1s-blog
malditoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo pudreteeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee perooooooooooooooooooo recontracoñuetumadreeeeeeeeeeeeeeeeeeeeeee
chamo no jallo los numeros romanos del uno al
5000
Por: 3v1s-blog
Deja un comentario
IMPORTANTE

Recuerda ser respetuoso, no insultes a otras personas, ni uses palabrotas, hay una persona al otro lado de la pantalla.

Habla bien, NO ESCRIBAS EN MAYUSCULA TODO, no escribas como en un SMS, evita cosas como "ke", "x q" y demás abreviaciones.

Aquí funcionan las etiquetas de los foros, puedes usar [b] para negrita, [img] para las imágenes, [url] para los enlaces, etc.

Si tienes preguntas técnicas, envíalas mejor al foro.