正则表达式用浮点数替换多个句点

时间:2012-02-18 18:08:20

标签: javascript regex

如果我输入这样的内容: a1.b22.333,我希望它输出:

1.22333 或122.333

它消除了非数字字符和超过1的任何句号。

我最好的猜测是:

obj.value = obj.value.replace( /[^0-9\.{1}]+/g ,  '');     
obj.value = obj.value.replace( /[^0-9\.{2,}]+/g ,'');     
obj.value = obj.value.replace( /[^0-9\.(?=.*\.)]+/g ,'');

但这些都是输出 1.22.333

如何摆脱那段额外的时期?

感谢您的帮助。

3 个答案:

答案 0 :(得分:13)

你可以这样做:

obj.value = obj.value.replace(/[^\d\.]/g, "")
  .replace(/\./, "x")
  .replace(/\./g, "")
  .replace(/x/, ".");

这将删除所有非数字非周期字符,然后仅用“x”替换第一个句点,然后删除所有其他句点,然后将“xxx”更改回句点。

答案 1 :(得分:1)

混合一些字符串切片,它的效果非常好* /

/* Remove everything but digits and dots */
var s = ".swe4.53dv3d.23v23.we".replace(/[^\d\.]/g, '');

/* Trim the string from dots */
s = s.replace(/^\.+/, '').replace(/\.+$/, '');

/* Fetch first position of dot */
var pos = s.indexOf(".");

/* Slice the string accordingly, and remove dots from last part */
s = s.slice(0, pos + 1) + s.slice(pos + 1, s.length).replace(/\./g, '');

/* s === "4.5332323" */

答案 2 :(得分:0)

如果使用函数确定替换字符串,则可以搜索任何非数字,然后记录到目前为止已经发生的点数:

var val = "a1.b22.333",
    i = 0;

val = val.replace(/\D/g, function(m) {
   if (m===".")
      return (++i > 1) "" : ".";
   return "";
});