正则表达式用于删除除科学记数法之外的所有非数字字符

时间:2013-10-29 00:36:45

标签: javascript jquery regex math scientific-notation

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

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

如果需要的话,我很乐意首先分成.并将数字作为2个不同的部分来处理。

3 个答案:

答案 0 :(得分:3)

您可以返回任何评估为数字的字符串

并清理那些没有的。

function cleanNumber(num){
    var N= Number(num);
    if(parseFloat(num)=== N) return num;
    return num.replace(/\D+/g, '') || '0';
}

cleanNumber( '7.71234e + 1')

  
    

(String)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

  

答案 1 :(得分:1)

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

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

示例:

var result = yourNbr.replace(/(\de[-+]\d)|[^-+0-9.]/gi, '$1');

答案 2 :(得分:0)

试试这个:

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

以下是每个示例的a working jsFiddle example

请注意,任何像这样的字符串清理程序都可能遇到很多问题,除非在每次按键操作后运行。例如,将x123.45e+5清理为123.45e+5是一回事。如果用户输入123.45e+5678.9e+10,尝试清理它是另一回事。在某些时候,如果在$1,234.56中有超过一个或两个流浪角色,很难说出你甚至想要回来的东西。