请教一个关于数字的正则判断问题

请教一个关于数字的正则判断问题

如果要用正则来判断一个变量的值是否为数(包括科学计数法的情况,以及省略小数点前面的0的情况)


我自己写了一个可是会有误判的情况发生

[Copy to clipboard] [ - ]
CODE:
$aaa =~ m/^[+-]?\d*\.?\d+[Ee]?[+-]?\d*$/

这样如果 $aaa = "3e"  ; 那么它会误判的

如果最后改成\d+ 那么就是要求至少是两位数字才可以了。。。

请问各位高手们,有没有完善的方法。。


谢过



QUOTE:
原帖由 hfmouse 于 2007-9-15 23:15 发表
如果要用正则来判断一个变量的值是否为数(包括科学计数法的情况,以及省略小数点前面的0的情况)


我自己写了一个可是会有误判的情况发生



$aaa =~ m/^[+-]?\d*.?\d+[Ee]?[+-]?\d*$/


这样如果  ...

至少是2位数字用{2,}即可
建议对科学计数法的判断单独列出

稍微修改了下, 仅验证科学记数法, 试一试看满足否
/^[+-]?\d(\.\d+)?[Ee]([+-]?\d{2,})?$/
啊。。ls误解我的意思了

我说如果用

[Copy to clipboard] [ - ]
CODE:
$aaa =~ m/^[+-]?\d*\.?\d+[Ee]?[+-]?\d+$/

就是把最后面的* 换成+号的话,在科学计数法的时候没有问题,但是没有科学计数法的时候,就只能匹配至少两个数字的情况了



我也在考虑把科学计数法单列出来。。。谢过

PS..中间加括号似乎可以解决

想到几种特例情况

比如 .34


我研究研究看

再Ps..  发现 我的小数点匹配前面竟然忘记加\ 了。。。Orz...


[Copy to clipboard] [ - ]
CODE:
$aaa =~ m/^[+-]?\d*\.?\d+([Ee][+-]?\d+)?$/

感谢楼上高手的灵感,这个应该是没有问题的了


QUOTE:
原帖由 hfmouse 于 2007-9-16 00:36 发表
$aaa =~ m/^[+-]?\d*\.?\d+([Ee][+-]?\d+)?$/


感谢楼上高手的灵感,这个应该是没有问题的了

不能匹配e后面没有数字的情况哦
稍微修改了下:
/^[+-]?\d*\.?\d+([Ee]?[+-]?\d*)?$/
[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?
刚好要用,找到一个
用过是好的
冬食四咏