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

Posted

技术标签:

【中文标题】正则表达式去除除科学记数法之外的所有非数字字符【英文标题】: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呢? 【参考方案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 中,很难说出您甚至想要返回什么。

【讨论】:

以上是关于正则表达式去除除科学记数法之外的所有非数字字符的主要内容,如果未能解决你的问题,请参考以下文章

从 PHP 中的字符串中删除除字母数字字符之外的所有内容

需要一个正则表达式来删除除数字之外的所有内容

正则表达式将除 / 之外的所有非字母数字字符替换为空(“”)字符

去除除链接之外的所有 HTML 标签

Rails 去除除数字逗号和小数点以外的所有内容

如何使用正则表达式替换除指定字符串之外的所有内容