Python 字符串模式

Posted

技术标签:

【中文标题】Python 字符串模式【英文标题】:Python string patterns 【发布时间】:2015-07-20 18:26:51 【问题描述】:

我有一些意见:'123Joe's amazing login'

我希望使用该输入做的是提醒正在注册到该站点的用户,他需要使他的用户名 url 友好

所以服务器端我想进行一些字符串匹配或比较,看看它是否确实是 url 友好的,如果可以,我们是黄金,如果不是,我想 urlfy 并将其发送回用户说类似:“嘿,这个名字:123joes-amazing-login 更好”

我不太确定从哪里开始寻找,有什么建议吗?

编辑:

其他 io 可能是:“this is awesome”到“this_is_awesome”等等……只需要确保它的 url 友好!

编辑 2: 我最终使用了这个:

username = str(request.form['username'])
username = urllib.quote(username, '')
if '%' in username:

这涵盖了处理的范围,即用户仍然可以下划线和破折号。

感谢大家的帮助。

【问题讨论】:

当用户名是 URL 的一部分时,为什么不直接删除用户名并在页面上显示时保持原样?例如,***.com/users/22656/jon-skeet 我当然可以用这种方式来处理它。对于我现有的东西,这可能是大量的回溯。我也想过这样做,但必须找出一种有效的方法来实现它。 【参考方案1】:

它不会像您那样安全,但您可以使用 urllib.quote,如 How to percent-encode URL parameters in Python? 中所述

【讨论】:

【参考方案2】:

pip install python-slugify,然后

>>> import slugify
>>> username = "123Joe's amazing login"
>>> slugify.slugify(username)
'123joes-amazing-login'

您可以检查给定的用户名是否等于 slugified 版本,如果它们不相等则执行警告逻辑。

现在,我想向您建议,这是一个有问题的设计选择。没有充分的理由不允许用户名包含空格和引号。如果您需要将它们转换为唯一的 url,通常最好通过生成用户 ID 和用户名来解决该问题。顺便说一句,这可以通过它看起来像用户名的 slugified 版本来完成(尽管您必须注意唯一性)。

【讨论】:

啊,太棒了!我会检查它,玩它,然后报告!另外,我必须承认,我确实希望用户使用下划线。我确实允许用户拥有“好名字”,我正在考虑允许他们也将其作为登录名。

以上是关于Python 字符串模式的主要内容,如果未能解决你的问题,请参考以下文章

python基础教程Python字符串及文本模式方法详解

python 与python中的字符串匹配的简单模式

检查字符串是不是与python中的IP地址模式匹配?

Python 字符串模式

python中获取如下模式字符串的方法

在交互模式下,Python 不保留字符串?