Ако въведем нещо подобно: 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
Как мога да се отърва от този допълнителен период?
Благодаря за вашата помощ.
Отговори:
13 за отговор № 1Можете да го направите по следния начин:
obj.value = obj.value.replace(/[^d.]/g, "")
.replace(/./, "x")
.replace(/./g, "")
.replace(/x/, ".");
Това премахва всички нечислени, непериодни знаци, след това заменя само първия период с „х“, след това премахва всички останали периоди, след което променя „xxx“ обратно към периода.
1 за отговор № 2
Смесете в някои нарязвания на струни и той работи прекрасно * /
/* 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" */
0 за отговор № 3
Ако използвате функция за определяне на заместващия низ, можете да потърсите нецифрени цифри и след това да преброите колко точки са се появили досега:
var val = "a1.b22.333",
i = 0;
val = val.replace(/D/g, function(m) {
if (m===".")
return (++i > 1) "" : ".";
return "";
});