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. Estimados, He estado dando vueltas hace un buen rato con el tema de expresiones regulares y no he podido resolver un problema. He logrado cosas ...
  #1 (permalink)  
Antiguo 26/03/2013, 15:05
 
Fecha de Ingreso: mayo-2008
Mensajes: 44
Antigüedad: 12 años
Puntos: 1
Exclamación Expresion regular

Estimados,
He estado dando vueltas hace un buen rato con el tema de expresiones regulares y no he podido resolver un problema. He logrado cosas pero no todas las condiciones que necesito.

Necesito validar atraves de una expresión regular que permita los siguientes valores
EJ:

Código PHP:
1° Caso:
000000001 (Correcto)
0000000011 (Incorrectoporque el largo del número no debe exceder los 9 caracteres)
000000001, (Incorrectoporque no puede terminar en un caracter especial como el -)

2° Caso:
000000001-000000010 (Correcto)
000000001-000000010,000000010  (Incorrectoporque necesito rangos y la coma invalida la busqueda por rango)

3° Caso:
000000001,000000003,000000007,000000009,000000010 (CorrectoPueden ser N.
000000001,000000003,000000007,000000009,000000010-000000011 (Incorrectoporque no puede tener un rango si estoy buscando valores alternos)
000000001,000000003, (Incorrectoporque no puede terminar con un caracter especial). 
He logrado solucionar el caso 1 y 2 con la siguiente expresión pero me falta por resolver el caso 3.

Código PHP:
Expresión regular : ^(d{9})?$|^(d{9}-d{9})?$|(d{9})(,d{9}) 

Cualquier ayuda se agradece.


Saludos
  #2 (permalink)  
Antiguo 26/03/2013, 17:19
Avatar de Albuss  
Fecha de Ingreso: enero-2012
Ubicación: Coruña
Mensajes: 475
Antigüedad: 8 años, 4 meses
Puntos: 30
Respuesta: Expresion regular

uan pregunta, los numeros los tratas como strings o como integers? por que, si son ints, puedes poner los ceros delante que quieras, que no los va a tener en cuenta.
  #3 (permalink)  
Antiguo 26/03/2013, 17:32
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 11 años, 1 mes
Puntos: 1485
Respuesta: Expresion regular

buenas...

@sikociado, más o menos lo estabas logrando. en el último subpatrón te falto anclarlo al inicio y final, además de repetir el subpatrón. de todos modos, esta es mi versión que creo funciona según las pocas pruebas que hice.
Código:
/^\d{9}$|^\d{9}\-\d{9}$|^\d{9}(?:,\d{9})+$/
@albuss, evidentemente los número los trata como string, de lo contrario no estaría trabajando con expresiones regulares ya que éstas son específicamente para strings.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #4 (permalink)  
Antiguo 27/03/2013, 06:58
 
Fecha de Ingreso: mayo-2008
Mensajes: 44
Antigüedad: 12 años
Puntos: 1
Respuesta: Expresion regular

Cita:
Iniciado por zerokilled Ver Mensaje
buenas...

@sikociado, más o menos lo estabas logrando. en el último subpatrón te falto anclarlo al inicio y final, además de repetir el subpatrón. de todos modos, esta es mi versión que creo funciona según las pocas pruebas que hice.
Código:
/^\d{9}$|^\d{9}\-\d{9}$|^\d{9}(?:,\d{9})+$/
Muchas gracias @zerokilled gracias por ayudarme con la solución. Me podrias explicar el ultimo patron porfavor :
^\d{9}(?:,\d{9})



Saludos. :)
  #5 (permalink)  
Antiguo 27/03/2013, 10:25
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 11 años, 1 mes
Puntos: 1485
Respuesta: Expresion regular

el patrón ^\d{9}(?:,\d{9})+$ básicamente significa coincidir 9 dígitos (\d{9}), seguido por la coincidencia de uno o más veces (signo + al final) del subpatrón (?:,\d{9}). el subpatrón en si significa lo mismo que el anterior, lo único que antes debe coincidir una coma (,). y la secuencia ?: es una instrucción que le dice al motor RegExp que no debe crear grupo de la subexpresión. esto último es opcional, según sea la necesidad. si lo eliminas, no hará diferencia en las coincidencias del patrón. la única diferencia es que algunas funciones podrían devolver más de un resultado.

ahora que lo vuelvo analizar, el patrón pudo haberse escrito así. el primer subpatrón ^\d{9}$ es redundante y se puede simplificar con el último subpatrón cambiando el cuantificador por asterísco (0 o más coincidencia):
Código:
/^\d{9}\-\d{9}$|^\d{9}(?:,\d{9})*$/
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Última edición por zerokilled; 27/03/2013 a las 10:32

Etiquetas: expresion, regular
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 08:04.