Python 中的区域设置感知数字验证?

问题描述 投票:0回答:1

我需要验证字符串是否具有有效的数字格式,而不是日期(以及包含数字的随机字符串)

我尝试使用

locale.atof()
解析字符串,期望在无效输入时出现 ValueError。

import locale
locale.setlocale(locale.LC_ALL, 'de_DE.UTF-8')

valid = locale.atof('1.234.567,89')
invalid = locale.atof('31.10.2024')

不幸的是,看起来

locale.atof()
只是删除了所有千位分隔符,无论其位置如何,因此
invalid
被解析为
31102024.0

是否有一种Python式的方法来进行区域设置感知的数字解析,并且不接受格式错误的数字?

python internationalization
1个回答
0
投票

是的,“atof()”仅将

delocalize()
的结果转换为浮动,这基本上删除了所有特定于语言环境的字符。

我认为你必须使用正则表达式,并使用

fullmatch()
函数:类似

from re import compile
regex = compile(r'(\d){1,3}(\.\d{3})*(\,\d+)?')
m = regex.fullmatch('12.345.678,90') #returns a Match object
m = regex.fullmatch('12.345678,90') #returns None
m = regex.fullmatch('31.10.2024') #returns None
© www.soinside.com 2019 - 2024. All rights reserved.