首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Django中用RegexValidator验证数字或数字范围的执行方法

在Django中用RegexValidator验证数字或数字范围的执行方法
EN

Stack Overflow用户
提问于 2019-11-28 05:16:50
回答 1查看 46关注 0票数 0

问题所在

我有一个具有CharField字段的模型,其中该字段只能接受数字或一系列数字。如果数字是小数且<1,则数字必须有前导零;如果数字是整数,则除非尾随期有尾随零,否则不能有尾随期。范围是用连字符划定的,不能包含任何空格。我使用Django的RegexValidator来验证字段。

注:--我不在乎范围是否反转(例如6-310.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

我目前的解决方案

代码语言:javascript
复制
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大师,所以如果有人能提供更好的解决方案,我会很感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-28 05:20:43

我使用这个regex模式:

代码语言:javascript
复制
^\d+(?:\.\d+)?(?:-\d+(?:\.\d+)?)?$

这意味着:

代码语言:javascript
复制
\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

Demo

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59082156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档