3

我正在寻找一种方法来清理 Javascript 中的数字,剥离所有非数字字符,除非它会破坏科学记数法。例如,我正在寻找以下输出......

  • 123.45=>123.45
  • 1a23.45=>123.45
  • 1a23.4re5=>123.45
  • *(@#123.45jkd=>123.45
  • 7.71234e+1=>7.71234e+1

如果需要,我非常乐意将.第一个拆分并将数字处理为 2 个不同的部分。

4

3 回答 3

3

您可以返回任何计算结果为数字的字符串,

并清理那些没有的。

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

于 2013-10-29T04:17:34.153 回答
1

您可以尝试此搜索/替换:

pattern: /([0-9]e[-+][0-9])|[^-+0-9.]/gi
replacement: $1

例子:

var result = yourNbr.replace(/(\de[-+]\d)|[^-+0-9.]/gi, '$1');
于 2013-10-29T00:54:29.460 回答
0

尝试这个:

var dirty_text = '*(@#123.45jkd';
var clean_text = dirty_text.replace(/(?![+-]?\d*\.?\d+|e[+-]\d+)[^0-9]/g,'');

这是一个适用于每个示例的 jsFiddle示例。

请注意,任何像这样的字符串清理例程都可能会遇到很多问题,除非它在每次按键后运行。例如,清理x123.45e+5123.45e+5. 如果用户输入123.45e+5678.9e+10. 在某些时候,如果有不止一两个杂散字符,例如 in $1,234.56,就很难说出您甚至想要返回什么。

于 2013-10-29T04:07:02.593 回答