正则表达式:除科学计数法外,去除所有非数字字符

3
我正在寻找一种在Javascript中清除数字的方法,除非这会破坏科学计数法,否则会删除所有非数字字符。例如,我正在寻找以下输出...
  • 123.45 => 123.45
  • 1a23.45 => 123.45
  • 1a23.4re5 => 123.45
  • *(@#123.45jkd => 123.45
  • 7.71234e+1 => 7.71234e+1
如果需要,我可以先按 . 拆分数字并将其视为两个不同的部分来处理。

1
什么构成了“数字”?“NaN”是数字吗?“Infinity”呢?“0xABC123”呢?您只对使用e的可能具有十次幂的十进制数感兴趣吗(即“1.23e4”)?那大写字母E呢? - zzzzBov
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


1
您可以尝试这个搜索/替换操作:


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

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

0

试试这个:

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,很难确定你甚至想要得到什么。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接