用于标识非数字字符串的正则表达式

时间:2011-12-22 15:00:08

标签: javascript regex

我有一个字符串,想要用双引号包装非数字(如果它们还没有它们)。使用正则表达式检测非数字的最佳方法是什么?

这些是数字: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"');

3 个答案:

答案 0 :(得分:3)

这个怎么样:

function isNumber(n) {
  return !isNaN(parseFloat(n)) && isFinite(n);
}

取自:Validate decimal numbers in JavaScript - IsNumeric()

答案 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
}