我正在寻找一种方法来清除Javascript中的数字,剥离所有非数字字符,除非它会破坏科学记数法。例如,我正在寻找以下输出......
123.45
=> 123.45
1a23.45
=> 123.45
1a23.4re5
=> 123.45
*(@#123.45jkd
=> 123.45
7.71234e+1
=> 7.71234e+1
如果需要的话,我很乐意首先分成.
并将数字作为2个不同的部分来处理。
答案 0 :(得分:3)
您可以返回任何评估为数字的字符串
并清理那些没有的。
function cleanNumber(num){
var N= Number(num);
if(parseFloat(num)=== N) return num;
return num.replace(/\D+/g, '') || '0';
}
cleanNumber( '7.71234e + 1')
(String)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 :(得分:1)
您可以尝试此搜索/替换:
pattern: /([0-9]e[-+][0-9])|[^-+0-9.]/gi
replacement: $1
示例:
var result = yourNbr.replace(/(\de[-+]\d)|[^-+0-9.]/gi, '$1');
答案 2 :(得分:0)
试试这个:
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
中有超过一个或两个流浪角色,很难说出你甚至想要回来的东西。