V2EX 中 @ 一个人是怎么实现的?

2016-10-21 11:24:30 +08:00
 shawshi
前端的 @ 默认是如何实现的我已经知道,但是传递到后端 [ @xxx ] ,再次在页面上显示时是怎么处理的?
5513 次点击
所在节点    Python
32 条回复
nanlong
2016-10-21 11:34:52 +08:00
正则替换
helloccav
2016-10-21 11:37:41 +08:00
/\s@(.*?)\s/
通过正则提取出主题、回复里出现过的所有用户名,传递到后端检查用户是否传在,传在就加上正超链接
cheetah
2016-10-21 11:42:50 +08:00
存储的时候转为用户 id 存
shawshi
2016-10-21 11:50:00 +08:00
@helloccav 在这个回复提交时做,还在展示列表的时候做?
ChoateYao
2016-10-21 11:53:57 +08:00
测试下各种情况下的 @ 。

第一种情况 @ChoateYao

第二种情况 @ChoateYao
Lcys
2016-10-21 12:03:46 +08:00
21grams
2016-10-21 12:06:00 +08:00
在发帖的时候就已经替换了吧
lrh3321
2016-10-21 12:06:05 +08:00
页面上看到的应该只是正则替换,@不存在的 ID 仍然 会有下划线

后台可能是检测下被 @ 的人是否存在,然后发通知过去吧
lrh3321
2016-10-21 12:06:31 +08:00
qiayue
2016-10-21 12:09:06 +08:00
被 @ 的提醒,是在提交的时候处理的
前端显示的时候再次把所有 @ 转换成链接,也有可能会缓存格式化的内容,这样就省去每一次显示的时候格式化
Lpl
2016-10-21 12:10:06 +08:00
Lpl
2016-10-21 12:11:24 +08:00
前端正则匹配,然后替换成链接。
比如上边: https://www.v2ex.com/member/vvvvvvvv

用户不存在就 404 ,存在就访问到相关页面了
shawshi
2016-10-21 12:15:46 +08:00
@Lpl 应该是在将回复数据保存到数据库时 做了正则替换。他保存到数据库时就是 带 html 格式的回复内容。知乎直接使用的 div 做的富文本编辑器,他在前端 @完就会生成带有连接的 a 标签。
wyntergreg
2016-10-21 12:26:29 +08:00
前端正文正则匹配

提交后端队列提醒
dong3580
2016-10-21 13:26:08 +08:00
压根不需要什么正则,就算你 @不存在的依然会显示链接。
在打开 https://www.v2ex.com/member/xxxx 这个页面检查一次当前用户是否存在。
至于收到提醒,插入一条记录呀,没有也插入呀,反正 @没有的人不存在。

测试:

@aaaaaaab 这里 带空格
@aaaaaaab 这里 不带空格
@这里 汉字
@aaaaaaab,这里 带标点
@aaaaaaab ,这里 带标点和空格
laduary
2016-10-21 13:31:16 +08:00
前端正则匹配,后端检测 ID 是否存在并且发送提醒吧。
@laduary
@4o4NotFound
ruandao
2016-10-21 13:42:31 +08:00
@史蒂夫流口水了电风扇的饭了
shawshi
2016-10-21 13:42:38 +08:00
@dong3580 后台需要用正则去处理你提交的内容。因为那个正则无法匹配到中文,所以那儿就没有显示超链接。 @不存在的人,因为后端没有验证处理。
Immortal
2016-10-21 14:18:07 +08:00
看前面讨论的
我插楼问个问题

对于这种 @后的内容提取,比如用户名
是前端提取后当,单独当一个参数给后台
还是前端什么都不管 纯粹交给后台去正则处理
...主要考虑到如果 @功能用的人多 正则性能又低下的话
StevenTong
2016-10-21 14:22:04 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/314362

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX