2010-03-24 11 views
5

Perdón por la pregunta tonta, potencialmente, pero estoy tratando de reunir una expresión regular que le permitirá:de expresiones regulares para decimal o de un panel

Una serie con 1 o 2 números antes de un punto decimal y los números 0-6 después del punto decimal. Sin embargo, también debo permitir que el campo esté en blanco si así lo requiere.

ejemplos válidos

0.952321 
1.20394 
12.12 
25 
Blank 

Ejemplos no válidos

123.45678 
1.1234567 

Por favor alguien puede ayudar?

+0

¿Qué idioma está utilizando? – miorel

+0

¿qué quieres decir con blanco? – PierrOz

Respuesta

1

^(?:|\d{1,2}(?:\.\d{0,6})?)$

La parte antes de la tubería partidos en blanco. La parte después coincide con uno o dos dígitos seguidos opcionalmente por un punto y hasta seis dígitos. El ?: es para que no usemos grupos de captura a menos que sea necesario.

Espero que esto ayude!

+0

en su expresión regular el. es obligatorio: no coincide con 25 en el ejemplo anterior – PierrOz

+0

gracias por este compañero –

+0

@PierrOz, sí, volví a verificar la pregunta y la arreglé :) ¡Gracias! – miorel

11
^(?:\d{1,2}(?:\.\d{0,6})?)?$ 

Debería hacer el truco.

\d  matches any digit 
{n,m} specifies the number of occurrences 
(?:) creates an anonymous group 
^  specifies the start of the string 
$    the end of the string 
?  means the group is optional 
+0

gracias por su ayuda –

+3

@Phil P: Si una de las respuestas ha resuelto su problema, modifique y acepte la mejor respuesta. – AxelEckenberger

2

Debe proporcionar el idioma en el que está utilizando la expresión regular, muchas tienen características que le permitirán crear expresiones más legibles. Aquí está una prueba de fallos POSIX regex:

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

Si la parte decimal es opcional, puede utilizar

^([0-9]{1,2}(\.[0-9]{1,6})?)?$ 
+0

+1 por no coincidir con un número que termina con un decimal (por ejemplo, "25."). Si bien no se menciona explícitamente en la pregunta, asumiría ese requisito. – Mark

0
^(\d{1,2}(\.\d{1,6})?)?$ 
+0

Su expresión regular coincidiría con un número entero de 8 dígitos. – miorel

+0

@Miorel: ah, tienes razón :) Creo que tendremos la misma al final :) – PierrOz

+0

Probablemente;) Me gusta cómo manejaste la opción en blanco, ¡debería cambiar la mía por eso! – miorel

0

lectura entre líneas, que amplió la definición de entrada aceptable y no y asumió que solo quería capturar el número en el formato descrito.

Por ejemplo, estos números capturaría como el número a la derecha y son todas las entradas aceptables:

"0.952321 " 0.952321    (trailing spaces stripped)  
" 1.20394 " 1.20394    (leading and trailing spaces stripped) 
"12.12"   12.12    (no leading or trailing spaces) 
"12.123 "  12.123 
" .1234 "   .1234    (no leading digit -- start with decimal) 
"25"     25    (no decimal) 
" "    " " ?    (space. space captured or not) 
"12."    12.    (1 or 2 digits, decimal, no numbers after decimal) 

No OK de entrada:

"."         just a decimal 
"123456789"       more than 2 digits lefthand 
123          ""  "" 
123.45678 
1.1234567        more than 6 digits right hand 
[a-zA_Z]        not a digit... 

Por lo tanto, teniendo en cuenta que, esta expresión regular hará it:

/^\s*(     # beginning of string and strip leading space         
| \d{1,2}\.?   # 1 or 2 digits with optional decimal 
| \d{0,2}\.\d{1,6}  # 0,1, 2 digits with a decimal with digits 
| \s+     # remove if you do not want to capture space 
)\s*$     # trailing blanks to the end 
/x 
0

En general, es decircifras decimales ilimitadas:

^-?(([1-9]\d*)|0)(.0*[1-9](0*[1-9])*)?$

0

me gustaría utilizar uno de estos:

Para que coincida con todos sus decimales:

(\d+\.\d+){0,1} 

Para ser más específico en número antes/después de la coma, intente/cambie con cualquiera de estos:

(\d+\.\d{2}){0,1} 
(\d{4}\.\d{2}){0,1} 
Cuestiones relacionadas