Replace occurrences of '\d' with '[0-9]' in Decimal regex, to make sure
that the behaviour of Decimal doesn't change if/when re.UNICODE becomes assumed in Python 3.0. Also add a check that alternative Unicode digits (e.g. u'\N{FULLWIDTH DIGIT ONE}') are *not* accepted in a numeric string.
This commit is contained in:
parent
8bb8fa5dd6
commit
70c3289085
|
@ -5337,20 +5337,20 @@ ExtendedContext = Context(
|
|||
# other meaning for \d than the numbers [0-9].
|
||||
|
||||
import re
|
||||
_parser = re.compile(r""" # A numeric string consists of:
|
||||
_parser = re.compile(r""" # A numeric string consists of:
|
||||
# \s*
|
||||
(?P<sign>[-+])? # an optional sign, followed by either...
|
||||
(?P<sign>[-+])? # an optional sign, followed by either...
|
||||
(
|
||||
(?=\d|\.\d) # ...a number (with at least one digit)
|
||||
(?P<int>\d*) # consisting of a (possibly empty) integer part
|
||||
(\.(?P<frac>\d*))? # followed by an optional fractional part
|
||||
(E(?P<exp>[-+]?\d+))? # followed by an optional exponent, or...
|
||||
(?=[0-9]|\.[0-9]) # ...a number (with at least one digit)
|
||||
(?P<int>[0-9]*) # having a (possibly empty) integer part
|
||||
(\.(?P<frac>[0-9]*))? # followed by an optional fractional part
|
||||
(E(?P<exp>[-+]?[0-9]+))? # followed by an optional exponent, or...
|
||||
|
|
||||
Inf(inity)? # ...an infinity, or...
|
||||
Inf(inity)? # ...an infinity, or...
|
||||
|
|
||||
(?P<signal>s)? # ...an (optionally signaling)
|
||||
NaN # NaN
|
||||
(?P<diag>\d*) # with (possibly empty) diagnostic information.
|
||||
(?P<signal>s)? # ...an (optionally signaling)
|
||||
NaN # NaN
|
||||
(?P<diag>[0-9]*) # with (possibly empty) diagnostic info.
|
||||
)
|
||||
# \s*
|
||||
\Z
|
||||
|
|
|
@ -432,6 +432,9 @@ class DecimalExplicitConstructionTest(unittest.TestCase):
|
|||
self.assertEqual(str(Decimal(u'-Inf')), '-Infinity')
|
||||
self.assertEqual(str(Decimal(u'NaN123')), 'NaN123')
|
||||
|
||||
#but alternate unicode digits should not
|
||||
self.assertEqual(str(Decimal(u'\uff11')), 'NaN')
|
||||
|
||||
def test_explicit_from_tuples(self):
|
||||
|
||||
#zero
|
||||
|
|
Loading…
Reference in New Issue