我有一个字符串,想要用双引号包装非数字(如果它们还没有它们)。使用正则表达式检测非数字的最佳方法是什么?
这些是数字:123.43,13827。这些是非数字:你好,2011-02-45,20a,A23。
这是我目前拥有的正则表达式,但是没有处理非数字以数字开头的情况(因此没有拾取2011-02-45)。
str = str.replace(/(['"])?([a-zA-Z0-9_\-]+)(['"])?:/g, '"$2":');
str = str.replace(/:(['"])?([a-zA-Z_]+[a-zA-Z0-9_]*)(['"])?/g, ':"$2"');
答案 0 :(得分:3)
这个怎么样:
function isNumber(n) {
return !isNaN(parseFloat(n)) && isFinite(n);
}
答案 1 :(得分:1)
我通过阅读另一个问题找到了解决方案。就是这个:
str.replace(/(['"])?([a-zA-Z0-9_\-]*[a-zA-Z_\-]+[a-zA-Z0-9_\-]*)(['"])?/g, '"$2"');
诀窍是确保比赛中有一位非数字。
答案 2 :(得分:0)
你可以做这样的事情,这比regexp快得多!
str = +str||false;
str = 123.4或者,如果不是数字,则为false
这是将“str”强制转换为实数,或者将其保留为字符串即可。
str = +str||str||false;
将其带到下一步,您可以检查输出:
if(typeof(str)=='string'){
//str is a string
}