【问题标题】:Django URL regular expression: make URL tolerate int or float valuesDjango URL 正则表达式:使 URL 容忍 int 或 float 值
【发布时间】:2012-04-05 11:04:15
【问题描述】:

网址格式为: 域/startValue/endValue/内容

这里,startValue 和 endValue 采用 int 或 float 数字..

我试过: /(\d+)/(\d+) 采用 int 值

和:

/(\d+\.\d+)/(\d+\.\d+) 接受浮点值

但不知道如何将它们放在一起,这需要两种格式的数字

试过了:

 /(\d+)|(\d+\.\d+)/(\d+)|(\d+\.\d+)

被浏览器告知url与视图函数参数不匹配

感谢您的建议!

【问题讨论】:

    标签: python regex django url numbers


    【解决方案1】:

    由于您总是从整数开始,只需使用 ? 正则表达式运算符将浮点部分设为可选,并使用非捕获组:

    intorfloat_re = "(\d+(?:\.\d+)?)"
    

    ..并在您的 url 定义中使用该字符串。

    【讨论】:

      【解决方案2】:

      我知道这已经被回答和接受,但是寻找正确的正则表达式,这个通过了我的路径。 因此,对给定和接受的答案进行了一些调整:

      使用

      intorfloat_positiveornegative_re = "(-?\d+(?:\.\d+)?)"
      

      如果您希望它同时接受负整数或正整数或浮点数

      顺便说一下,我把这个答案和这个问题的答案结合起来了:Regex to match a negative number in Django URL dispatcher?

      【讨论】:

        【解决方案3】:

        您试图从正则表达式匹配中返回太多组。试试这个:

        (\d?\.\d+|\d+)
        

        这将匹配 0-1 个数字,然后是 .,然后是一个或多个数字。它还首先获取浮点数,因此您不会得到第一个数字而不是浮点数。

        【讨论】:

          【解决方案4】:

          这可能是旧的,但只是为了同谋,这样的事情可能更有帮助和安全

          "-?\d{1,3}(\.\d{1,5})?"
          

          你可以指定你想要的范围

          【讨论】:

            猜你喜欢
            • 2011-03-25
            • 2011-03-22
            • 2013-07-26
            • 2014-07-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多