He pasado horas tratando de encontrar una solución. Tengo el siguiente RegEx:

(?=.)^(([1-9][0-9]{0,8})|([0-9]))?(\.[0-9]{1,2})?$

Quiero agregar la capacidad para que el primer personaje coincida con un signo menos pero igual coincida con el resto del RegEx indicado.

I need these to work:
.0
.34
-.34
-30.0
-33.03
-34
-2

I need these to fail:
-04.4
043
3.
-
$34.33
1234567890.23
(any non-numeric character)

Gracias por su asistencia.

0
Al Weaver 4 sep. 2014 a las 20:14

3 respuestas

La mejor respuesta

Agregar el -? opcional en el lugar correcto debería ser el truco.

También estoy bastante seguro de que no necesita todos estos grupos de captura (consulte demostración aquí):

^-?(?=.)(?:[1-9][0-9]{0,8}|0)?(?:\.[0-9]{1,2})?$

^-?                   # optional leading -
(?=.)                 # followed by at least one character
(?:                   # non capturing group
    [1-9][0-9]{0,8}   # number without leading 0
|                     # or
    0                 # single 0
)?                    # integer part is optional
(?:\.[0-9]{1,2})?$    # decimal part
0
Robin 4 sep. 2014 a las 16:33

Puedes usar esta expresión regular:

^-?(?:[1-9][0-9]{0,8}(?:\.[0-9]{1,2})?|\.[0-9]{1,2})$

Demo de RegEx

EDITAR: Si desea permitir 0.45 como entrada válida, use:

^-?(?:[1-9][0-9]{0,8}(?:\.[0-9]{1,2})?|0*\.[0-9]{1,2})$
3
anubhava 4 sep. 2014 a las 16:34

Esto debería funcionar para ti

^(?:-[1-9.]{1}[0-9]*|\.|0\.)\.?[0-9]{0,2}$

Demo

0
alairock 4 sep. 2014 a las 17:00