【问题标题】:Django URL Regex for an "Address"“地址”的 Django URL 正则表达式
【发布时间】:2013-06-09 10:17:20
【问题描述】:

我正在尝试在我的 urls.py 中为 json 查询编写一个 url 正则表达式,该查询将采用这样的 url:

http://localhost:8000/structures/hydrants/3/json?address=100+Washington+Road,+Sacramento,+CA

并将其定向到这样的视图:

def hydrant_json(request, hydrant_address):
    hydrant = Hydrant.objects.filter(address = hydrant_address)
    data = [hydrant.json()]
    return HttpResponse(json.dumps(data), content_type='application/json')

地址定义如下:

class Address(models.Model):
    class Meta:
        verbose_name_plural = "addresses"
    street_num = models.IntegerField(default=0)
    street = models.CharField(max_length=200)
    city = models.CharField(max_length=200)
    state = models.CharField(max_length=200)
    def json(self):
        fields = ('street_num', 'street', 'city', 'state')
        return {
            'street_num': str(self.street_num),
            'street': str(self.street),
            'city': str(self.city),
            'state': str(self.state)
        }
    def __unicode__(self):
        return str(self.street_num) + ' ' + self.street + ', ' + self.city + ', ' + self.state

和 hydrant.json() 工作,一切都是花花公子在视图方面。我只希望正则表达式以上面显示的格式接收一个确切的地址,适合查询 URL。

谢谢!

【问题讨论】:

  • 试试这个正则表达式[\w\+,]+ 这个正则表达式也允许额外的_。要严格[a-zA-Z0-9,\+]+
  • ObXKCD: xkcd.com/208

标签: regex django django-urls


【解决方案1】:
r'(?<address>^\d{1,5}\s[a-zA-z\s]+,\s[a-zA-z]+,\s[A-Z]{,2}$)'

这是最严格的。

基本上它的作用是:

  • 确保它以数字开头

  • 确保号码最长为 5 位数字(不确定这可以多长,如果需要,请调整{1,5}

  • 确保逗号、空格和街道名称跟在后面

  • 确保后面有逗号、空格和城市名称

  • 确保逗号,状态跟随并以状态结尾

【讨论】:

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