如果我输入这样的内容: 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
如何摆脱那段额外的时期?
感谢您的帮助。
答案 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 "";
});