From 09452bc1d4796fc242acf58419b0bce3bd3ba54d Mon Sep 17 00:00:00 2001 From: =?utf8?q?Alexis=20Laferri=C3=A8re?= Date: Sat, 19 Dec 2015 11:36:30 -0500 Subject: [PATCH] lib/core: extend is_numeric to support negatives (!) and e notation MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Alexis Laferrière --- lib/core/text/abstract_text.nit | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/core/text/abstract_text.nit b/lib/core/text/abstract_text.nit index 8b9b68b..e201e0c 100644 --- a/lib/core/text/abstract_text.nit +++ b/lib/core/text/abstract_text.nit @@ -309,16 +309,22 @@ abstract class Text # # assert "123".is_numeric == true # assert "1.2".is_numeric == true + # assert "-1.2".is_numeric == true # assert "1,2".is_numeric == true + # assert "-1.23e-2".is_numeric == true # assert "1..2".is_numeric == false fun is_numeric: Bool do var has_point_or_comma = false + var e_index = -1 for i in [0..length[ do var c = chars[i] if not c.is_numeric then if (c == '.' or c == ',') and not has_point_or_comma then has_point_or_comma = true + else if c == 'e' and e_index == -1 and i > 0 and i < length - 1 and chars[i-1] != '-' then + e_index = i + else if c == '-' and i == e_index + 1 and i < length - 1 then else return false end -- 1.7.9.5