《Vue.js实战》 一书 p102 有一个判断参数值是否为数值的正则表达式,援引如下:
function isValueNumber(value) { return (/(^-?[0-9]+.{1}d+$)|(^-?[1-9][0-9]*$)|(^-?{1}$)/).test(value + ''); }
为更准确的理解这段正则的含义,特意找出《精通正则表达式》一书,重温了起来。
《精通。。。》一书 p24举了个例子,如何匹配美元金额,答案是:
$[0-9]+(.[0-9][0-9])?
作者提及,此表达式无法匹配 $.49,答案在p194揭晓了,既使用分支选项。
不过我在使用 egrep 尝试此例子时,却遇到了奇异现象,
1)单独使用
$[0-9]+(.[0-9][0-9])?
可匹配 $19.9 和 $22,不能匹配 $.49
2)单独使用
$.[0-9]+
可匹配 $.49,不能匹配 $19.9 和 $22
3)合并使用前两者,则无法同时匹配这3个数值,仔细研究后,发现是在使用匹配任意子表达式时,符号 | 的前后有空格,导致的出错,去掉空格,则可成功匹配3个数值。见下图。