Foros del Web » Programando para Internet » Javascript »

Ayuda con expresión regular

Estas en el tema de Ayuda con expresión regular en el foro de Javascript en Foros del Web. Hola! Estoy intentando hacer una expresión regular para utilizarlo como máscara. La idea es que el usuario sólo puede meter en una caja de texto ...
  #1 (permalink)  
Antiguo 13/04/2007, 01:22
 
Fecha de Ingreso: abril-2007
Mensajes: 3
Antigüedad: 17 años
Puntos: 0
Ayuda con expresión regular

Hola!

Estoy intentando hacer una expresión regular para utilizarlo como máscara.

La idea es que el usuario sólo puede meter en una caja de texto una de las siguientes cosas:

1) Un valor numérico con 3 enteros y 3 decimales; que puede llevar o no el signo negativo (-) por delante. Para las decimales uso la coma

2) Una sola la letra p ó v (tanto minúsculas como mayúsuculas)

3) Sólo 2 letras pero que la primera siempre sea la 'n' (minúscula o mayúscula)

Hasta ahora para los números he conseguido hacer esto y creo que funciona bien:

/^[-]?(\d{1,3}([\,]\d{0,3})?)?$/

Para el caso 2 uso esto:

/^(n|N)(\D)?$/

y en el 3 ya me he atascado porque no consigo juntar las expresiones regulares anteriores.

Además hay que sumarle el problema de los caracteres especiales como el "Intro", "Supr" o la barra espaciadora.

He intentado varias combinaciones pero no me sale. Si alguien me puede ayudar se lo agradecería un montón.

Uns saludo y gracias.
  #2 (permalink)  
Antiguo 13/04/2007, 21:58
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: Ayuda con expresión regular

Cita:
Iniciado por luke24
Además hay que sumarle el problema de los caracteres especiales como el "Intro", "Supr" o la barra espaciadora.
Lo siento, de esto no sé nada, excepto de la barra espaciadora que se representa con un espacio sin más, o con un \s.

Pero de lo demás sí que te puedo ayudar:
Código:
function e(q,br) {
	document.body.appendChild( document.createTextNode(q) );
	if(br!==0) document.body.appendChild( document.createElement("BR") );
}

// positivo o negativo, tres dígitos, y parte decimal opcional con maxima longitud 3 dígitos
var re1=/^-?\d{1,3}(\,\d{1,3})?$/;
var re2=/^[-]?(\d{1,3}([\,]\d{0,3})?)?$/;

// una p o una v con indiferencia de mayúsculas o minúsculas
var re3=/^[pv]$/i;

// una n y una letra cualquiera, con indiferencia de mayúsculas o minúsculas
var re4=/^n[a-záéíóúüñ]$/i;
var re5=/^(n|N)(\D)?$/;

String.prototype.testear=function(re) {
	if( re.test(this) )
		var comment=" encaja con "+re;
	else
		var comment=" NO encaja con "+re;
	return "\""+this+"\""+comment;
}

e("Expresión regular número derkeNuke:");
e( "12".testear(re1) );
e( "-".testear(re1) );
e( "-12".testear(re1) );
e( "12,".testear(re1) );
e( "-12,".testear(re1) );
e( "1221".testear(re1) );
e( "12,341".testear(re1) );
e( "12,3421".testear(re1) );
e("");
e("Expresión regular número luke24:");
e( "12".testear(re2) );
e( "-".testear(re2) );
e( "-12".testear(re2) );
e( "12,".testear(re2) );
e( "-12,".testear(re2) );
e( "1221".testear(re2) );
e( "12,341".testear(re2) );
e( "12,3421".testear(re2) );
e("");
e("");
e("Expresión regular p ó v derkeNuke:");
e( "p".testear(re3) );
e( "P".testear(re3) );
e( "v".testear(re3) );
e( "V".testear(re3) );
e( "h".testear(re3) );
e( "y".testear(re3) );
e("");
e("");
e("Expresión regular n y letra derkeNuke:");
e( "n".testear(re4) );
e( "np".testear(re4) );
e( "nh".testear(re4) );
e( "vU".testear(re4) );
e( "nU".testear(re4) );
e( "yu".testear(re4) );
e( "Nt".testear(re4) );
e( "Nta".testear(re4) );
e( "Ná".testear(re4) );
e( "NÍ".testear(re4) );
e( "Nñ".testear(re4) );
e( "nÜ".testear(re4) );
e( "n3".testear(re4) );
e("");
e("Expresión regular n y letra luke24:");
e( "n".testear(re5) );
e( "np".testear(re5) );
e( "nh".testear(re5) );
e( "vU".testear(re5) );
e( "nU".testear(re5) );
e( "yu".testear(re5) );
e( "Nt".testear(re5) );
e( "Nta".testear(re5) );
e( "Ná".testear(re5) );
e( "NÍ".testear(re5) );
e( "Nñ".testear(re5) );
e( "nÜ".testear(re5) );
e( "n3".testear(re5) );
Fíjate que en tu expresión regular para los números encajan cosas como "-", "12,", "-12,".

La expresión de p ó v es fácil, supongo que no tendrías problemas con ella, pero por si acaso la he incluído.

Para la de n+letra tienes la segunda letra opcional, no sé si ese era tu deseo. Por lo demás es casi la misma a la expresión regular que te planteo yo, sólo la he puesto como propuesta didáctica

Para juntar las 3... tienes varias opciones:
O poner un if con el testeo de la misma cadena con las 3 expresiones por separado (que es la que yo escogería por ser la más legible..):
Código PHP:
if( re1.test(cadena) || re2.test(cadena) || re3.test(cadena) ) 
O unir las 3 expresiones regulares en una... La manera sería asi:
Código:
 var reTotal=/(re1|re2|re3)/i; 
var reTotal=/(^-?\d{1,3}(\,\d{1,3})?$|^[pv]$|^n[a-záéíóúüñ]$)/i;
pero claro, es un poco más liosa, aunque haga lo mismo.


Le elección es tuya.


Espero haberte ayudado.


Un saludo.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #3 (permalink)  
Antiguo 13/04/2007, 22:49
Avatar de Shiryu_Libra
Colaborador
 
Fecha de Ingreso: febrero-2007
Ubicación: Cantando "Screenager" en "Kirafa Kaput"
Mensajes: 3.614
Antigüedad: 17 años, 2 meses
Puntos: 88
Re: Ayuda con expresión regular

derkenuke(), aprovechando el post de expresiones...

si quisiera usar este tipo de expresiones en un text box, para que solo acepte un ip(xxx.xxx.xxx.xxx) como la implementaria amigo

tengo un codigo que creo me proporciono JAvierB
Código:
<script  language="javascript" type="text/javascript"> function ips(form)
 {
 cadena = document.C1.criterio.value;

DE ESTA FORMA????
expreg = /[0-9]{3}[0-9]{3}[0-9]{3}[0-9]{3}*/;


 ret=true;
if(expreg.test(cadena))
{alert("bien escrito");}
  else
  {alert("No es Correcto, por favor verifique");}
 return ret;
 }
 </script>
<form>
<input id="maquina" type="text" onkeypress="return ips(event)" />
</form>

pero creo que me faltan los puntos no es asi??
me podrias ayudar con esa expresion, si no es mucha molestia??

gracias por tu tiempo
__________________
"Eres parte del problema, parte de la solucion o parte del paisaje"
Un Saludo desde Desierto de Altar, Sonora, MX.
Shiryu_libra
  #4 (permalink)  
Antiguo 14/04/2007, 21:35
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: Ayuda con expresión regular

Hola Shiryu_Libra

Para validar una ip puedes encontrar informacion en google, es bastante comun
http://www.google.es/search?q=regular+expression+ip

Teoricamente te valdria con esa expresion, teniendo en cuenta que habria que a;adir los puntos con \.

Aunque como pone aqui, te pasaria la IP 999.999.999.999, que es raramente real. Te recomiendan usar este monstruo...

Código:
(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)
En fin, todo depende de lo que te quieras complicar.. Y recuerda poner el ^$ para las marcas de inicio y de fin de cadena, si no te cogeria cualquier cosa que contuviera una IP.

Un saludo
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:35.