2010-12-31 13 views
67

Tengo un campo de texto que debe seguir siendo solo texto o decimal. Aquí está el código que estoy usando para reemplazar todo, excepto los números y un punto decimal. Cuestión es, no puedo imaginar una expresión regular que identificará todo lo demásRegex para reemplazar todo, excepto los números y un punto decimal

document.getElementById(target).value = newVal.replace(/\D[^\.]/g, ""); 

El \ D funciona bien, pero he intentado (?!.), (?!\.), [^.], [^\.] y así sucesivamente ...

¿Alguna sugerencia para un examen regular expresión que se identifica positivamente con cualquier cosa excepto un número o un decimal?

Gracias por la ayuda

+0

en caso de que' Estoy buscando verificar los números reales en lugar de dígitos numéricos: http://stackoverflow.com/questions/42328875/javascript-regex-to-remove-all-numbers-with-specific-lenght-or-do-a-persistent – cregox

Respuesta

145

Utilice esta:

document.getElementById(target).value = newVal.replace(/[^0-9.]/g, ""); 
+0

Gracias, funciona – guildsbounty

+1

@Hugo esto no permite nada, simplemente no debe pasar una cadena que potencialmente podría contener más puntos decimales y preprocesarla primero. Es como decir que la cadena permite que cada personaje ... –

+2

Luego ejecute el valor devuelto a través de parseFloat. Eso eliminará puntos decimales adicionales. p.ej. 'parseFloat (" 46554.4655465.54654.545345.5 ") = 46554.4655465' – Simon

4

Prueba esto:

document.getElementById(target).value = newVal.replace(/^\d+(\.\d{0,2})?$/, "");

+2

mejor respuesta. Quita 0.000 10.000000 .22 2.234, pero mantiene 1, 10, 10.1, 10.22 –

+0

Esta expresión parece complicada, ¿podría explicar cómo funciona o qué eliminaría exactamente? – Minderov

+0

Esto no funciona con la entrada cirílica como "5.12 руб." – Minderov

6

Remover sólo decimal parte se puede hacer de la siguiente manera:

number.replace(/(\.\d+)+/,''); 

Esto convertiría 13.6667px en 13px (dejando unidades px sin tocar).

Cuestiones relacionadas