Foros del Web » Programando para Internet » Javascript »

expresion regular

Estas en el tema de expresion regular en el foro de Javascript en Foros del Web. Hola chicos Tengo un string (1, 2, 3) y necesito crear una expresion regular que acepta la combinacion "1,2,3" y "1,2" y "1,3" , "2,3" ...
  #1 (permalink)  
Antiguo 10/10/2007, 06:03
 
Fecha de Ingreso: septiembre-2006
Mensajes: 349
Antigüedad: 17 años, 6 meses
Puntos: 0
expresion regular

Hola chicos
Tengo un string (1, 2, 3) y necesito crear una expresion regular que acepta la combinacion "1,2,3" y "1,2" y "1,3" , "2,3" y con espacios y sin espacios
como "1 , 2 ," o sea con coma al final y espacios entre los numeros.

Gracias a todos.
  #2 (permalink)  
Antiguo 10/10/2007, 09:24
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: expresion regular

Bueno viktoria, intentémoslo. Pero has dejado las posibilidades demasiado abiertas. Voy a intentar descifrar más o menos lo que quieres y me dices si voy en lo correcto:

  1. Los números han de ser consecutivos aumentando de menor a mayor. Es decir: Vale 1,2,3 y 1,2 y 1,3; pero no vale 3,2,1 ni 2,1 ni 3,1 (por estar de mayor a menor).
  2. Los números no pueden repetirse en el String dado (no puede aparecer el mismo número dos veces).
  3. Pueden haber espacios simples, o varios entre un número y una coma, o entre una coma y un número; pero no pueden haber dos comas seguidas (o una coma seguida de espacio(s) seguido(s) de otra coma).
  4. Puede comenzar por coma o por espacio(s).
  5. Puede terminar por coma o espacio(s)
  6. No se admiten otros caracteres que no sean el uno (1), el dos (2) y el tres(3). También hay dos caracteres especiales permitidos: el espacio en blanco () y la coma (,).
  7. Debe haber una coma y sólo una entre un número y otro número, amén de los espacios que queramos.


Bueno, comenta detalladamente qué es lo que entra dentro de tus exigencias, y qué es lo que no encaja ahí.

Procura ser claro cuando tienes dudas con una expresión regular, ten en cuenta que todas las combinaciones son posibles... y hay que controlarlas todas.


Te dejo lo que podría ser un primer intento:
Código PHP:

// frases de prueba
var strs = [
    
// Deberían dar true
    
"1,2,3",
    
"1,2",
    
"1,3",
    
"2,3",
    
"1 , 2 ,",
    
"1   ,3   , 2",
    
"1   ,1   , 2",
    
"1",
    
"1,",
    
"1   ,   ",
    
// Deberían dar false
    
""
    
"12",
    
"123",
    
"1,23",
    
"1 2",
    
"1,,2",
    
"1,3,,",
    
"1,2, 3,4",
    
"h",
    
"micasa"
];

// expresión regular
var re = /^[1-3]( *, *[1-3]( *, *[1-3])?)? *,? *$/;

// prueba de las frases
for(var i in strs) {
    
document.write("<pre>\""+strs[i]+"\" ha dado "+re.test(strs[i])+"</pre>");



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 11/10/2007, 01:11
 
Fecha de Ingreso: septiembre-2006
Mensajes: 349
Antigüedad: 17 años, 6 meses
Puntos: 0
Re: expresion regular

Muchas gracias derkenuke!.
ESta explicado muy bienm aunque los nuemros 1,2,3 los he puesto yo de ejemplo.
Los numero que van en cadena seran algo asi (34, 56, 114, 150) y por eso no puedo poner [34-150] porque solo pueden ir los que estan dentro de la cadena, ademas pueden ir en cualquier orden.

Sigo investigando!
  #4 (permalink)  
Antiguo 11/10/2007, 14:30
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: expresion regular

Hola de nuevo viktoria:

Si he posteado tantos puntos a tener en cuenta, qué menos que darles respuesta por tu parte a cada uno de ellos para obtener respuestas concretas.

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 11:03.