正则表达式替换数字和小数点以外的所有内容


113

我有一个文本字段,只需要保留文本或十进制即可。这是我当前用来替换除数字和小数点以外的所有内容的代码。问题是,我想不出一个可以识别其他所有内容的正则表达式

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

\ D工作正常,但是我已经尝试过了(?!.), (?!\.), [^.], [^\.],等等。

对于正则表达式是否可以用数字或小数表示正数的任何建议?

谢谢您的帮助


如果您要检查的是实际数字而不是数字:stackoverflow.com/questions/42328875/…–
cregox

Answers:


238

用这个:

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
罗伯·贝克

该表达式看起来很复杂,您能解释一下它的工作原理或将要删除的内容吗?
米德罗夫'16

这不适用于西里尔字母输入,例如“ 5.12руб”。
米德罗夫'16

4
“ 11111” .replace(/ ^ \ d +(\。\ d {0,2})?$ /,“”)-结果为空字符串
yAnTar

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.