如何在 Django 网址中允许“@”?

How to allow "@" in django urls?

我希望用户能够在其用户名中选择符号 @ 以及字母数字和连字符。然而,这会导致相关正则表达式中的 404:

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

我尝试了 [\w.-@][\w.-\@] 但 none 成功了。

如何解决这个问题?

您可以将 @ 设为可选。此模式将捕获大多数类似电子邮件的字符串。

(?P<username>[-\w]+(?:\@)?[A-Za-z0-9.-]+(?:\.)?[A-Za-z]{2,4})

如果你想捕捉像 a@a 这样的东西,你需要在之后做所有事情,包括可选的句点:

(?P<username>[-\w]+(?:\@)?[A-Za-z0-9.-]+(?:\.[A-Za-z]{2,4})?)?

该模式将匹配:

foo@bar.com
foo@bar
foobar

这个问题没有说明电子邮件地址,只是想要用户名中的 @ 符号,这就足够了:

url(r'^(?P<username>[\w@\d-]+)/$', 'userprofile.views.profile'),

相关位是:[\w@\d-\.]+,它匹配至少一个单词字符,一个@符号*,任何数字,一个连字符或一个点。

* The @ symbol is the only character on a standard 101 keyboard to not have a name!