繁体   English   中英

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

[英]Regular expression to strip all non numeric characters except 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个不同的部分处理。

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

并清理那些没有的。

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

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

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清理为x123.45e+5 123.45e+5 如果用户输入123.45e+5678.9e+10 ,则完全尝试清理它是另一回事。 在某些时候,有超过一个或两个流浪角色,比如$1,234.56 ,很难说你甚至想要回来。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM