如何强制Django的urls.py正则表达式仅限制为ASCII数字?

时间:2013-07-13 21:20:57

标签: python django django-templates

我的urls.py中有以下条目:

url(r'^\d{2}/$', 'test.view'),

我显然只想匹配2位数,所以12位好,23位好,但123位不好,而且效果很好。

然而,当我尝试阿拉伯数字和英语数字时,如22或44,它匹配,但我不想要这种行为!例如,数字24导致以下请求:

http://localhost/2%D9%A4

我绝对不希望这样。如何使Django URL CONF只接受正常的ascii数字?

1 个答案:

答案 0 :(得分:3)

\d匹配任何数字,包括阿拉伯数字。只需使用[0-9]代替:

url(r'^[0-9]{2}/$', 'test.view'),

引自docs

  

\ d

     

未指定UNICODE标志时,匹配任何十进制数字;   这相当于集合[0-9]。使用UNICODE,它将匹配   无论在Unicode字符中被分类为十进制数字   属性数据库。

例如,

٢٤是Unicode十进制数字:

>>> u'٤'.isdigit()
True
>>> u'٢'.isdigit()
True

希望有所帮助。