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 字符串模式的主要内容,如果未能解决你的问题,请参考以下文章