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

Regular expression to strip all non numeric characters except scientific notation

本文关键字:数字字符 正则表达式 用于      更新时间:2023-09-26

我正在寻找一种在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';
}

清洁编号('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;
}

清洁数字2('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,尝试清理它完全是另一回事。 在某些时候,有一两个以上的流浪角色,就像在$1,234.56中一样,很难说出你甚至想找回什么。