问题
我有一个模型,它有一个CharField
字段,其中该字段只能接受数字或一系列数字。如果数字是十进制且为 <1,则数字必须具有前导零;如果它们是整数,则除非尾随周期具有尾随零,否则它们不能具有尾随句点。范围使用连字符描绘,不得包含任何空格。我正在使用 Django 的RegexValidator
来验证该字段。
注意:我不在乎范围是否颠倒(例如6-3
,10.3-0.13
(
以下是应在验证器中传递的一些值示例:
5
0.42
5.0
5-6
5-6.0
0.5-6.13
5.1-6.12
13.214-0.1813
这些对于验证器来说应该是无效的值:
5.
5.1.3
5.13.215
5-13.2-14
.13-1.31
5-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.'
)
]
)
我需要什么帮助
如您所见,这是一个非常粗糙的正则表达式模式,我不确定此模式是否具有性能。我不是正则表达式大师,所以如果有人提供更好的解决方案,我将不胜感激。
我会使用这个正则表达式模式:
^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