首先,这个问题与
不一样strip non-numeric characters from string或
Regex to replace everything except numbers and a decimal point
我想转换一个有效数字的字符串,如。
--1234// will be -1234
-123-123 will be -123123
12.123.3 will be 12.1233
-123.13.123 will be -123.13123
我试过那些
number.replace(/[^0-9.-]/g, '') //it accepts multiple . and -
number.replace(/[^0-9.]-/g, '').replace(/(\..*)\./g, '$1');//it accepts multiple minus
我面临领先减号的问题。
我如何转换一个字符串,除去前导后除去所有字符 - (删除其他减号),数字和只有一个点(删除其他点)
答案 0 :(得分:4)
我在这里分享我的解决方案
让我们假设字符串是a
;
//this will convert a to positive integer number
b=a.replace(/[^0-9]/g, '');
//this will convert a to integer number(positive and negative)
b=a.replace(/[^0-9-]/g, '').replace(/(?!^)-/g, '');
//this will convert a to positive float number
b=a.replace(/[^0-9.]/g, '').replace(/(\..*)\./g, '$1');
//this will convert a to float number (positive and negative)
b=a.replace(/[^0-9.-]/g, '').replace(/(\..*)\./g, '$1').replace(/(?!^)-/g, '');
答案 1 :(得分:2)
不是很干净,但有效!
var strings = ["-1234","-123-123","12.123.3", "-123.13.123"];
strings.forEach(function(s) {
var i = 0;
s = s.replace(/(?!^)-/g, '').replace(/\./g, function(match) {
return match === "." ? (i++ === 0 ? '.' : '') : '';
});
console.log(s);
});
答案 2 :(得分:2)
根据@Shaiful Islam的回答,我又添加了一个代码。
http://somehost/32724/foo
结果
var value = number
.replace(/[^0-9.-]/g, '') // remove chars except number, hyphen, point.
.replace(/(\..*)\./g, '$1') // remove multiple points.
.replace(/(?!^)-/g, '') // remove middle hyphen.
.replace(/^0+(\d)/gm, '$1'); // remove multiple leading zeros. <-- I added this.
答案 3 :(得分:0)
在下面给出的样本数据中,
--1234
-123-123
12.123.3
-123.13.123
-
(减号或连字符)没有问题,因为它的位置在数字之前仅,而不在数字之间。所以这可以使用以下正则表达式来解决。
正则表达式: -(?=-)|(?<=\d)-(?=\d+(-\d+)?$)
并替换为empty
字符串。
<强> Regex101 Demo 强>
但是,无法确定.
(十进制)的位置。因为123.13.123
也可能意味着123.13123
和12313.123
。
答案 4 :(得分:0)
如果没有正则表达式,您可以通过这种方式映射字符:
// this function takes in one string and return one integer
f=s=>(
o='', // stands for (o)utput
d=m=p=0, // flags for: (d)igit, (m)inus, (p)oint
[...s].map(x=> // for each (x)char in (s)tring
x>='0'&x<='9'? // if is number
o+=x // add to `o`
:x=='-'? // else if is minus
m||(p=0,m=o=x) // only if is the first, reset: o='-';
:x=='.'? // else if is point
p||(p=o+=x) // add only if is the first point after the first minus
:0), // else do nothing
+o // return parseInt(output);
);
['--1234','-123-123','12.123.3','-123.13.123'].forEach(
x=>document.body.innerHTML+='<pre>f(\''+x+'\') -> '+f(x)+'</pre>')
&#13;
希望它有所帮助。
答案 5 :(得分:0)
我的解决方案:
number.replace(/[^\d|.-]/g, '') //removes all character except of digits, dot and hypen
.replace(/(?!^)-/g, '') //removes every hypen except of first position
.replace(/(\.){2,}/g, '$1') //removes every multiplied dot
然后应该使用 Intl.NumberFormat
将其格式化为正确的语言环境设置。