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:
- 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).
- Los números no pueden repetirse en el String dado (no puede aparecer el mismo número dos veces).
- 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).
- Puede comenzar por coma o por espacio(s).
- Puede terminar por coma o espacio(s)
- 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 (,).
- 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.