Regex เพื่อแทนที่ทุกอย่างยกเว้นตัวเลขและจุดทศนิยม


113

ฉันมีช่องข้อความที่ต้องคงไว้แค่ข้อความหรือทศนิยม นี่คือรหัสที่ฉันกำลังใช้เพื่อแทนที่ทุกอย่างยกเว้นตัวเลขและจุดทศนิยม ปัญหาคือฉันไม่สามารถหานิพจน์ทั่วไปที่จะระบุอย่างอื่นได้

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

\ D ใช้งานได้ดี แต่ฉันพยายามไปเรื่อย(?!.), (?!\.), [^.], [^\.]ๆ ...

ข้อเสนอแนะสำหรับนิพจน์ทั่วไปที่ระบุในเชิงบวกกับสิ่งใด ๆ ยกเว้นตัวเลขหรือทศนิยม?

ขอบคุณสำหรับความช่วยเหลือ


ในกรณีที่คุณต้องการตรวจสอบตัวเลขจริงแทนที่จะเป็นตัวเลข: stackoverflow.com/questions/42328875/…
cregox

คำตอบ:


239

ใช้สิ่งนี้:

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

1
@Hugo สิ่งนี้ไม่อนุญาตให้ทำอะไรเลยคุณไม่ควรส่งผ่านสตริงที่อาจมีจุดทศนิยมมากกว่าและประมวลผลล่วงหน้าก่อน เหมือนกับการบอกว่าสตริงอนุญาตให้ทุกตัวอักษร ...
jave.web

3
จากนั้นรันค่าที่ส่งคืนผ่าน parseFloat ซึ่งจะลบจุดทศนิยมเพิ่มเติม เช่นparseFloat("46554.4655465.54654.545345.5") = 46554.4655465
Simon

1
นี่เป็นวิธีที่ดีในการแปลงตัวเลขที่จัดรูปแบบไว้แล้วเช่นเงินให้เป็นตัวเลขที่คำนวณได้
lu1s

8

การลบเฉพาะส่วนทศนิยมสามารถทำได้ดังนี้:

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

สิ่งนี้จะแปลง 13.6667px เป็น 13px (ปล่อยให้หน่วย px ไม่ถูกแตะต้อง)


7

ลองสิ่งนี้:

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


2
คำตอบที่ดีที่สุด เอา 0.000 10.000000.22 2.234 แต่เก็บ 1, 10, 10.1, 10.22
Robert Baker

สำนวนนี้ดูซับซ้อนคุณช่วยอธิบายวิธีการทำงานหรือสิ่งที่จะลบออกได้ไหม
Minderov

ใช้ไม่ได้กับอินพุตซีริลลิกเช่น "5.12 руб"
Minderov

4
"11111" .replace (/ ^ \ d + (\. \ d {0,2})? $ /, "") - ผลลัพธ์สตริงว่าง
yAnTar

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.