Sayılar ve ondalık nokta hariç her şeyi değiştirmek için normal ifade


113

Yalnızca metin veya ondalık olarak kalması gereken bir metin alanım var. İşte şu anda sayılar ve ondalık nokta dışındaki her şeyi değiştirmek için kullandığım kod. Sorun şu ki, diğer her şeyi tanımlayacak bir normal ifade bulamıyorum

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

\ D iyi çalışıyor, ama denedim (?!.), (?!\.), [^.], [^\.]ve benzeri ...

Bir sayı veya ondalık sayı dışında herhangi bir şeyle pozitif olarak özdeşleşen bir normal ifade öneriniz var mı?

Yardım için teşekkürler


sayısal rakamlar yerine gerçek sayıları kontrol etmek istiyorsanız: stackoverflow.com/questions/42328875/…
cregox

Yanıtlar:


239

Bunu kullan:

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

1
@Hugo bu hiçbir şeye izin vermez, sadece potansiyel olarak daha fazla ondalık nokta içerebilecek bir dizeyi geçmemeli ve önce onu önceden işlememelisiniz. Dize her karaktere izin veriyor
demek

3
Sonra döndürülen değeri parseFloat aracılığıyla çalıştırın. Bu, ek ondalık noktaları kaldıracaktır. örneğinparseFloat("46554.4655465.54654.545345.5") = 46554.4655465
Simon

1
Bu, para gibi önceden biçimlendirilmiş sayıları hesaplanabilir bir kayan noktaya dönüştürmek için harikadır.
lu1s

8

Yalnızca ondalık bölümün kaldırılması şu şekilde yapılabilir:

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

Bu, 13.6667px'i 13px'e dönüştürür (birim piksellere dokunulmadan bırakılır).


7

Bunu dene:

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


2
en iyi cevap. 10.000000 0,22 2,234 0.000 kaldırır, ancak 10.1, 10, 1 tutar, 10.22
Robert Baker

Bu ifade karmaşık görünüyor, nasıl çalıştığını veya tam olarak neyi kaldıracağını açıklayabilir misiniz?
Minderov

Bu, "5,12 руб" gibi kiril girdileriyle çalışmaz.
Minderov

4
"11111" .replace (/ ^ \ d + (\. \ D {0,2})? $ /, "") - sonuç boş dize
yAnTar

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.