Python -验证货币



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

如何简单地使用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'

请注意,它只是将小数点后第二个数后面的任何数字截断。你应该更具体地向我们展示更多你期望的行为的例子。

您可以使用正则表达式:

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

如果输入正确则返回匹配对象,否则返回None

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

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

re.match(r'^[1-9]d*(.d{1,2})?$', val)
  • ^$:不匹配整个字符串,将有办法混淆正则表达式。
  • [1-9]:第一个字符总是应该从1到9
  • d*:第一位数字后任意位数
  • (.d{1,2})?:可选的1-2位分数,带点分隔符。如果需要多个分隔符支持,请使用[.,]而不是.

最新更新