整个字符串是数字,但如果在开头则忽略全部为零

时间:2018-03-19 16:51:24

标签: javascript regex

我使用以下内容确保字符串只是数字:

myStr.match(/^[0-9]*$/g);

但我希望通过在开头忽略任何零来改进它,除非它是唯一的数字,或者如果全部为零则只返回0。

我喜欢这样的事情:

myStr = "0"; //--> match = 0
myStr = "00"; //--> match = 0
myStr = "10"; //--> match = 10
myStr = "05"; //--> match = 5
myStr = "000007"; //--> match = 7

我想这里的第二行让事情变得更棘手,因为我还在检查是否只有零。也许这对于正则表达式来说太过分了。我发现了很多检查它是否从零开始并跳过它的例子,但是我很难找到能够抓住其余数字并忽略零的东西。

编辑:就parseInt()而言,遗憾的是,这是一个After Effects表达式,它使用较旧版本的ECMAScript。像parseInt(" 010")之类的东西返回8(八进制)。

1 个答案:

答案 0 :(得分:3)

没有lookbehind(即将推出JavaScript),除了正则表达式之外,你还需要一个捕获组或其他逻辑。

这是捕获组版本:

/^0*(\d+)$/

(非常感谢ctwheels指出我早期的0|[1-9]\d*可以缩短为\d+ [因为我们已经消耗了任何前导零除外使用前导\d+]来满足0*!)

示例:



var rex = /^0*(\d+)$/;
function test(myStr, expect) {
  var match = myStr.match(rex);
  var val = match ? match[1] : null;
  console.log(myStr, val, val === expect ? "Good" : "ERROR");
}
test("0", "0");
test("00", "0");
test("10", "10");
test("05", "5");
test("000007", "7");