diff --git a/setup.py b/setup.py
index 8973d22..362a263 100644
--- a/setup.py
+++ b/setup.py
@@ -8,7 +8,7 @@
setup(
name="pyvalem",
- version="2.5.7",
+ version="2.5.8",
description="A package for managing simple chemical species and states",
long_description=long_description,
long_description_content_type="text/x-rst",
diff --git a/src/pyvalem/formula.py b/src/pyvalem/formula.py
index 3bf892d..25eaed6 100644
--- a/src/pyvalem/formula.py
+++ b/src/pyvalem/formula.py
@@ -310,6 +310,9 @@ def _parse_formula(self, formula):
if any(s in formula for s in ("++", "--", "+-", "-+")):
raise FormulaParseError("Invalid formula syntax: {}".format(formula))
+ # NB whilst NH2+CH3CHO2- is allowed, things like 'Li+2-' are not...
+ if re.search(r"[+-]\d+[+-]", formula):
+ raise FormulaParseError("Invalid formula syntax: {}".format(formula))
# We make a particular exception for various special cases, including
# photons, electrons, positrons and "M", denoting an unspecified
diff --git a/tests/test_formula.py b/tests/test_formula.py
index 06bd67a..cb3950b 100644
--- a/tests/test_formula.py
+++ b/tests/test_formula.py
@@ -107,6 +107,14 @@ def test_charged_species(self):
self.assertRaises(FormulaParseError, Formula, "H--")
self.assertRaises(FormulaParseError, Formula, "H+-")
self.assertRaises(FormulaParseError, Formula, "H-+")
+ self.assertRaises(FormulaParseError, Formula, "Li-2+")
+
+ cf2 = Formula("NH2+CH3CHO2-")
+ self.assertEqual(
+ cf2.html,
+ "NH2+CH3CHO2-",
+ )
+ self.assertEqual(cf2.charge, 0)
def test_special_formulas(self):
# stoichiometric_formula, html, latex, slug, rmm, natoms, charge, atoms