数字验证 - 如果它是数字,指数值,它应该通过否则它应该失败

时间:2014-04-14 12:55:44

标签: java regex

我正在使用^[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?$这个正则表达式,它适用于所有情况。但对于像123E104这样的值,它无法验证。

我猜123E104不是指数值。由于123E104是无效的指数值。结果应为假或不匹配

4 个答案:

答案 0 :(得分:1)

123E + 104实际上是JavaScript的常用方法,可能是语言表示大指数的字符串表示。

答案 1 :(得分:1)

尝试

^[-+]?[0-9]*(\\.[0-9]*)?([eE][-+]?[0-9]+)?$

您没有考虑没有指定分数的科学格式的情况。

请注意,此正则表达式会记录123.E14之类的数字。如果您不想要未指定显式分数的小数点,请替换小数部分的量词,即

^[-+]?[0-9]*(\\.[0-9]+)?([eE][-+]?[0-9]+)?$

答案 2 :(得分:1)

你的正则表达式实际上太聪明了 - 在点之前使用星号来让它匹配以点开头的数字的技巧实际上是适得其反的。问题是,*是一个贪婪的量词,所以如果在点之前匹配了一些数字,那么第二组之后的+就没有任何东西了。位数。

修复非常简单 - 在第一个* 不情愿之后添加一个问号:

^[-+]?[0-9]*?\\.?[0-9]+([eE][-+]?[0-9]+)?$
//          ^

完成此更改后,123前面的E会在[0-9]*?[0-9]+之间分开,从而导致匹配。

// This returns true:
Pattern.matches("^[-+]?[0-9]*?\\.?[0-9]+([eE][-+]?[0-9]+)?$", "123E104")

Demo on ideone.

答案 3 :(得分:0)

123E104无效? 123E104应表示123 x(10 ^ 104)