2011-04-06 41 views
10

¿Cuál sería la expresión regular para permitir los dígitos y un punto? Con respecto a esto \D solo permite dígitos, pero no permite un punto, lo necesito para permitir dígitos y un punto esto es referirse como un valor flotante Necesito ser válido al hacer una función keyup en jQuery, pero todo lo que La necesidad es la expresión regular que solo permite lo que necesito permitir.Regex permitir dígitos y un solo punto

Esto será en el nativo de JavaScript replace función para eliminar no dígitos y otros símbolos (excepto un punto).

Saludos.

Respuesta

35

Si desea permitir 1 y 1.2:

(?<=^|)\d+(\.\d+)?(?=$|) 

si desee permitir 1, 1.2 y .1:

(?<=^|)\d+(\.\d+)?(?=$|)|(?<=^|)\.\d+(?=$|) 

Si desea sólo para permitir 1.2 (sólo flotadores):

(?<=^|)\d+\.\d+(?=$|) 

\d permite dígitos (mientras \D permite cualquier cosa, pero dígitos).

(?<=^|) comprueba que el número esté precedido por un espacio o el comienzo de la cadena. (?=$|) se asegura de que la cadena sea seguida por un espacio o el final de la cadena. Esto asegura que el número no sea parte de otro número o en medio de palabras o cualquier cosa.

Editar: añadido más opciones, mejoró las expresiones regulares mediante la adición de lookahead- y traseros para asegurarse de que los números son independientes (es decir, no están en el medio de palabras u otros números de

+0

Esa expresión regular informará una coincidencia en prácticamente cualquier cosa. Por ejemplo, en .NET el resultado de 'Regex.Replace (" xyzzy ", @" \ d * (\. \ D +)? ","! ");' Será '! X! Y! Z! Z! y! '. Estoy bastante seguro de que los resultados en JavaScript serán los mismos. Como todo es opcional, la expresión regular coincidirá en todas las posiciones. –

+0

@Jim Mischel, buena idea. Edité la respuesta con expresiones regulares mejoradas. –

+4

@ [Harpyon] ¿Hay algo que falta? Aparece el mensaje "Grupo inválido":/(? <=^|) \ D + (\. \ D +)? (? = $ |) | (? <=^|) \. \ D + (? = $ |)/ – Zesty

12
\d*\.\d* 

Explicación:

\ d * - cualquier número de dígitos

\. - un punto

\ d * - más dígitos.

Esto corresponderá con 123.456, .123, 123., pero no 123

Si desea que el punto sea opcional, en la mayoría de idiomas (no saber acerca de jQuery) se puede utilizar

\d*\.?\d* 
+1

'\ D' es cualquier carácter ** excepto ** dígitos. '\ d' es lo que quieres decir. – Francisc

+2

'\ D' es el inverso de" hacer coincidir un dígito "- ¡coincidirá con cualquier cosa que no sea un dígito! –

+1

Gracias, @Francisc y @Platinum. Lo arreglé ahora. La razón del error es que copié el '\ D' de la pregunta original. Sé que en Python '\ d' significa" dígito "y' \ D' significa "cualquier cosa menos un dígito", pero pensé que si el OP menciona '\ D' entonces debe ser diferente en jQuery. De acuerdo con sus comentarios, aparentemente mi primer pensamiento fue correcto y debería haberlo seguido :) –

1

Prueba este

.
boxValue = boxValue.replace(/[^0-9\.]/g,""); 

esta expresión regular permitirá que sólo dígitos y puntos en el valor del cuadro de texto.

+0

esto permitirá múltiples puntos, y la pregunta es permitir solo un punto – synan54

2

Mi intento es solución combinada.

string = string.replace(',', '.').replace(/[^\d\.]/g, "").replace(/\./, "x").replace(/\./g, "").replace(/x/, "."); 
string = Math.round(parseFloat(string) * 100)/100; 

Solución de primera línea desde aquí: regex replacing multiple periods in floating number. Reemplaza a la coma "," con el punto "." ; Reemplaza la primera coma con x; Elimina todos los puntos y reemplaza x de nuevo a punto.

La segunda línea limpia los números después del punto.

+1

Gracias. Después de buscar desde 2 horas, obtuve esta respuesta. Y esto encaja perfectamente en mi conjunto de requisitos (solo dígitos numéricos junto con un punto). Gracias una vez más. –

+1

Lo mismo :)) Roman, gracias !! – AlexIL

Cuestiones relacionadas