验证输入为货币的最佳方法是什么(没有任何货币符号)我的有效输入只能是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位分数,带点分隔符。如果需要多个分隔符支持,请使用[.,]
而不是.