我正在寻找一种方法来清理 Javascript 中的数字,剥离所有非数字字符,除非它会破坏科学记数法。例如,我正在寻找以下输出......
123.45
=>123.45
1a23.45
=>123.45
1a23.4re5
=>123.45
*(@#123.45jkd
=>123.45
7.71234e+1
=>7.71234e+1
如果需要,我非常乐意将.
第一个拆分并将数字处理为 2 个不同的部分。
我正在寻找一种方法来清理 Javascript 中的数字,剥离所有非数字字符,除非它会破坏科学记数法。例如,我正在寻找以下输出......
123.45
=>123.45
1a23.45
=>123.45
1a23.4re5
=>123.45
*(@#123.45jkd
=>123.45
7.71234e+1
=>7.71234e+1
如果需要,我非常乐意将.
第一个拆分并将数字处理为 2 个不同的部分。
您可以返回任何计算结果为数字的字符串,
并清理那些没有的。
function cleanNumber(num){
var N= Number(num);
if(parseFloat(num)=== N) return num;
return num.replace(/\D+/g, '') || '0';
}
cleanNumber('7.71234e+1')
(字符串)7.71234e+1
或者您可以将字符串转换为数字并返回一个数字-
function cleanNumber2(num){
var N= Number(num);
if(parseFloat(num)=== N) return N;
return Number(num.replace(/\D+/g, '')) || 0;
}
cleanNumber2('7.71234e+1');
(号码)77.1234
您可以尝试此搜索/替换:
pattern: /([0-9]e[-+][0-9])|[^-+0-9.]/gi
replacement: $1
例子:
var result = yourNbr.replace(/(\de[-+]\d)|[^-+0-9.]/gi, '$1');
尝试这个:
var dirty_text = '*(@#123.45jkd';
var clean_text = dirty_text.replace(/(?![+-]?\d*\.?\d+|e[+-]\d+)[^0-9]/g,'');
这是一个适用于每个示例的 jsFiddle示例。
请注意,任何像这样的字符串清理例程都可能会遇到很多问题,除非它在每次按键后运行。例如,清理x123.45e+5
到123.45e+5
. 如果用户输入123.45e+5678.9e+10
. 在某些时候,如果有不止一两个杂散字符,例如 in $1,234.56
,就很难说出您甚至想要返回什么。