《Vue.js实战》 一书 p102 有一个判断参数值是否为数值的正则表达式,援引如下:
function isValueNumber(value) { return (/(^-?[0-9]+.{1}d+$)|(^-?[1-9][0-9]*$)|(^-?0{1}$)/).test(value + ''); }
试解析如下:
1)表达式中有 3 个子表达式
2)第一个子表达式
^-?[0-9]+.{1}d+$
起始的脱子符^表示匹配的条件是行的开头。
结尾处的 $符号表示匹配的行末尾。
-?,表示匹配0到1个 -。
字符组[0-9]+,表示 匹配0至9中的任意一个数字,后面的+号,表示匹配1个或无数个数字。
.,表示转义 . 符号,匹配一个 .。
后面的{1},表示匹配.的数量为1。
d,表示匹配一个数字,后面的+号,表示匹配1个或无数个数字。
2)第二个子表达式
^-?[1-9][0-9]*$
首尾的^$含义同上。
-?表示匹配0到1个 -。
[1-9]匹配1到9中的任意一个数值。
[0-9]匹配0至9中的任意一个数值。后缀*号,表示匹配数量为0到任意个。
3)第三个表达式
^-?0{1}$
表示匹配一个 - 符号。
后跟一个0,数量为1。