【问题标题】:Regular expression to strip all non numeric characters except scientific notation正则表达式去除除科学记数法之外的所有非数字字符
【发布时间】:2013-10-29 00:36:45
【问题描述】:

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

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

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

【问题讨论】:

  • 什么是“数字”? “NaN”是数字吗? “无限”怎么样? “0xABC123”呢?您是否只对使用e(即“1.23e4”)的十进制数感兴趣?资本E呢?

标签: javascript jquery regex math scientific-notation


【解决方案1】:

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

并清理那些没有的。

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

【讨论】:

    【解决方案2】:

    你可以试试这个搜索/替换:

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

    示例:

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

    【讨论】:

      【解决方案3】:

      试试这个:

      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 中,很难说出您甚至想要返回什么。

      【讨论】:

        猜你喜欢
        • 2020-01-15
        • 2016-04-03
        • 1970-01-01
        • 2011-09-08
        • 2014-03-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-01
        相关资源
        最近更新 更多