接受点的用户名的 Django url 正则表达式

Posted

技术标签:

【中文标题】接受点的用户名的 Django url 正则表达式【英文标题】:Django url regex for username that accepts dots 【发布时间】:2015-08-08 12:53:27 【问题描述】:

我在 Django 中使用这个 url 来处理用户名正则表达式已经有一段时间了:

url(r'^.../(?P<username>[-\w]+)/$'

但现在,我遇到了一个奇怪的案例,有时 Google 会用这样的用户名回答:

luke.skywalker 而不是 lukeskywalker

而且看起来我的正则表达式不接受点 - 我收到 NoReverseMatcherror。有人可以帮我正确的正则表达式吗?

【问题讨论】:

试试:[a-zA-Z.]+,你可能要检查第一个答案here 请注意,google 的非标准行为是 luke.skywalker@gmail.com 和 lukeskywalker@gmail.com 实际上是同一个电子邮件地址。你的问题是你没有匹配它们(丹尼尔罗斯曼的答案应该处理并且还得到Gocht的评论答案不会的破折号/下划线/数字),或者你还需要“规范化”事情以便luke.skywalker和 lukeskywalker 被视为相同的用户名?[我实际上更喜欢替代方法,这样我可以从同一个电子邮件地址创建相对大量的测试帐户,但我可以看到正常情况可能会被激怒] @Foon 感谢您的信息。我正在使用 Python Social Auth 进行记录(以防有人发现这很有用)。 【参考方案1】:

您可以在方括号内添加您想要接受的字符:

r'^.../(?P<username>[-\w.]+)/$'

【讨论】:

【参考方案2】:

只需将lookup_value_regex 添加到您的视图集:

class UserViewSet(viewsets.ModelViewSet):
      lookup_value_regex =  r"[\w.]+"

Source

【讨论】:

以上是关于接受点的用户名的 Django url 正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

如何设置只接受 3 个特定单词的 Django URL 正则表达式?

django - 可选 url 参数的正则表达式

停止基于 / 为 Django 中的 url 捕获任何字符串(正则表达式)

使用“OR”条件的正则表达式

django url 正则表达式匹配可选参数

Django进阶