Python - 验证货币

时间:2011-10-14 12:09:36

标签: python

将输入验证为货币(没有任何货币符号)的最佳方法是什么? 我的有效输入只能是40或40.12

的形式

3 个答案:

答案 0 :(得分:6)

如何简单地使用format()并尝试/除错值?

>>> "{:.2f}".format(float("40.12"))
'40.12'
>>> "{:.2f}".format(float("40"))
'40.00'
>>> "{:.2f}".format(float("40.123"))
'40.12'
>>> try:
...     "{:.2f}".format(float("40.123€"))
... except ValueError:
...     "fail"
... 
'fail'

请注意,它只是删除小数点后面第二个数字后面的任何数字。 你应该通过向我们展示你想要的行为的更多例子来更具体。

答案 1 :(得分:3)

您可以使用正则表达式:

re.match(r'\d+(?:[.]\d{2})?$', '40.12')

如果输入正确,则返回匹配对象;如果不是,则返回None

上述正则表达式匹配一个或多个数字,可选地后跟一个点和正好两个数字。如果我没有准确地捕捉你的要求,这可以根据需要进行调整(问题陈述对解释有点开放)。

答案 2 :(得分:0)

我一直在谷歌搜索大约一个小时,以正确的方式如何做到这一点。我还没有找到任何真正好的和安全的方法,并在下面写了正则表达式,以便在点分隔符后匹配正的非零数字和可选的1-2位数字:

re.match(r'^[1-9]\d*(\.\d{1,2})?$', val)
  • ^$:如果没有匹配整个字符串,就会有办法搞砸正则表达式。
  • [1-9]:第一个字符应始终为1到9
  • \d*:在第一位数后允许任意数量的数字
  • (\.\d{1,2})?:带点分隔符的可选1-2位数分数。如果需要多个分隔符支持,请使用[\.\,]代替\.
相关问题