Javascript删除除前导字符、一个点和数字以外的所有字符

Javascript删除除前导字符、一个点和数字以外的所有字符,javascript,regex,Javascript,Regex,首先,这个问题与 或 我想转换一个有效数字的字符串,如 --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(/(\..*)\.

首先,这个问题与

我想转换一个有效数字的字符串,如

--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
我面临着引导负号的问题


如何转换一个字符串,该字符串将删除除前导字符(删除其他负号)、数字和以下示例数据中的一个点(删除其他点)

--1234
-123-123
12.123.3
-123.13.123
-
(减号或连字符)不会引起任何问题,因为它的位置仅在位数之前,而不是位数之间。所以这可以用下面的正则表达式来解决


正则表达式:
-(?=-)|((?不是很干净,但很有效

var strings=[“-1234”、“-123-123”、“12.123.3”、“-123.13.123”];
strings.forEach(函数){
var i=0;
s=s.replace(/(?!^)-/g',).replace(/\./g,函数(匹配){
返回match===”?(i++==0?):“”):“”;
});
控制台日志;

});
如果不使用正则表达式,可以通过以下方式映射字符:

//此函数接受一个字符串并返回一个整数
f=s=>(
o='',//表示(o)输出
d=m=p=0,//标记为:(d)初始值,(m)初始值,(p)点
[…s].map(x=>//对于(s)字符串中的每个(x)字符

x> ='0'&xdocument.body.innerHTML+='f(\''+x+'\')->'+f(x)+'
我在这里分享我的解决方案。
//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
假设字符串是
a

//this will convert a to float number (positive and negative)
b=a.replace(/[^0-9.]/g')。replace(/(..*)/g,$1');

b=a.replace(/[^0-9.-]/g')。replace(/(…*)/g,“$1')。replace(/(?!^)-/g');

更新浮点数。(解决复制粘贴问题)
根据@Shaiful Islam的回答,我又添加了一个代码

00.434 => 0.434
我的解决方案:


它应该使用<代码> IntNoMultFrase。< /P>格式化为适当的区域设置。我不认为你可以用正则表达式来实现这一点,你将逻辑应用到匹配中。例如,你想把不同的数字串连接到一个中间丢弃一些字符。ReGEX不是这样做的工具。@ FedericoPiazza。我就快到了。你能帮我写正则表达式,找到除第一个以外的所有-(减号)@ShaifulIslam:我想出了解决-(减号)问题的方法。但是

(十进制)
位置不能用简单的规则来定义。请检查我的答案以获得解释。@ShaifulIslam,看看我的答案是否对您有帮助。谢谢我从您的答案
编号中得到了想法。替换(/[^0-9.-]/g',)。替换(/(\..*)\./g,$1')。替换(/(?!^)-/g',)
@ShaifulIslam,很高兴我能帮上忙。如果你能接受答案,我将不胜感激。对我有利,我可以说我的函数运行在
O(n)
Nice中,但如果在末尾加一个减号,则不起作用最后一个减号将
'1.2.3.4.5'
转换为
'1.2.3.45'
@Atomosk感谢您的示例。但是我在输入字段中使用了该表达式。当用户键入一个点时,他们无法为该表达式键入第二个点,这就是为什么我没有注意到该异常。复制和粘贴如何?它不会删除多个点。多个点如何?1.2.3它不起作用,因为没有关于哪个点是十进制的信息l分离器。
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.
00.434 => 0.434
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