问题所在
我有一个具有CharField字段的模型,其中该字段只能接受数字或一系列数字。如果数字是小数且<1,则数字必须有前导零;如果数字是整数,则除非尾随期有尾随零,否则不能有尾随期。范围是用连字符划定的,不能包含任何空格。我使用Django的RegexValidator来验证字段。
注:--我不在乎范围是否反转(例如6-3,10.3-0.13)
以下是验证器中应该传递的值的一些示例:
50.425.05-65-6.00.5-6.135.1-6.1213.214-0.1813对于验证器来说,这些值应该是无效的:
5.5.1.35.13.2155-13.2-14.13-1.315-6.5 - 6我目前的解决方案
my_field = models.CharField(
...
validators=[
RegexValidator(
r'^[0-9]+([.]{1}[0-9]+){0,1}([-]{1}[0-9]+([.]{0,1}[0-9]+){0,1}){0,1}$',
message='Only numerics or range of numerics are allowed.'
)
]
)我需要帮助的是
正如您所看到的,这是一个非常粗糙的正则表达式,我不太确定这个模式是否具有表现性。我不是regex大师,所以如果有人能提供更好的解决方案,我会很感激。
发布于 2019-11-28 05:20:43
我使用这个regex模式:
^\d+(?:\.\d+)?(?:-\d+(?:\.\d+)?)?$这意味着:
\d+ match an initial whole number component
(?:\.\d+)? followed by an optional decimal component
(?:
- range separator
\d+ second whole number
(?:\.\d+)? with optional decimal component
)? the range being optional
https://stackoverflow.com/questions/59082156
复制相似问题