正则表达式去除除科学记数法之外的所有非数字字符
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
中,很难说出您甚至想要返回什么。
【讨论】:
以上是关于正则表达式去除除科学记数法之外的所有非数字字符的主要内容,如果未能解决你的问题,请参考以下文章