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