Ver Mensaje Individual
  #2 (permalink)  
Antiguo 10/10/2007, 09:24
Avatar de derkenuke
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.