当前位置: 首页 > article >正文

昵称 校验

1. 基本格式校验

1.	长度限制
•	设置最小和最大字符长度:2-20 个字符(常见范围)。
•	避免昵称过短或过长影响显示和识别。
•	示例:
•	2 ≤ 长度 ≤ 20:

let minLength = 2
let maxLength = 20
if nickname.count < minLength || nickname.count > maxLength {
print(“昵称长度不符合要求”)
}

2. 字符类型限制

•	支持字母、数字、空格、下划线、中文字符等常用字符。
•	禁止特殊字符(如 @, #, $, % 等)以防跨站脚本攻击(XSS)。
•	示例:

let regex = “1+$”
let nickname = “user_123”
let isValid = NSPredicate(format: “SELF MATCHES %@”, regex).evaluate(with: nickname)
if !isValid {
print(“昵称包含非法字符”)
}

3.	空格处理
•	不允许昵称以空格开头或结尾。
•	示例:

if nickname.hasPrefix(" “) || nickname.hasSuffix(” ") {
print(“昵称不能以空格开头或结尾”)
}

  1. 敏感内容过滤
    1. 敏感词过滤
      • 防止昵称包含不良用语、辱骂性语言或敏感词汇。
      • 示例:
      • 使用敏感词库比对:加载敏感词列表,对昵称进行关键词匹配检查。
    2. 广告和联系方式检测
      • 避免昵称包含手机号、邮箱、网址或营销信息,以防恶意推广。
      • 示例:

let emailRegex = “[A-Z0-9a-z._%±]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,64}”
let phoneRegex = “^(\+\d{1,3}[- ]?)?\d{10,14}$”
let urlRegex = “https?😕/[a-zA-Z0-9./]+”

let patterns = [emailRegex, phoneRegex, urlRegex]
for pattern in patterns {
let pred = NSPredicate(format: “SELF MATCHES %@”, pattern)
if pred.evaluate(with: nickname) {
print(“昵称中包含联系方式或广告内容”)
}
}

3.	政治敏感内容检测
•	检测是否包含政治相关或攻击性词汇,维护平台安全。
•	示例:维护敏感词库动态更新并实时拦截。

3. 重复性和唯一性检查

1.	重复检测
•	检查昵称是否已被其他用户使用,确保昵称唯一性。
•	示例:

let existingNicknames = [“user1”, “admin123”]
if existingNicknames.contains(nickname) {
print(“昵称已被占用”)
}

2.	大小写敏感性处理
•	检查昵称时可以忽略大小写,比如 User123 和 user123 应视为重复。
•	示例:

if existingNicknames.contains(where: { $0.lowercased() == nickname.lowercased() }) {
print(“昵称已存在”)
}

4. 特殊规则检测

1.	保留关键字检测
•	禁止包含系统关键字或管理员角色,如 "admin"、"root" 等。
•	示例:

let forbiddenKeywords = [“admin”, “root”, “system”]
if forbiddenKeywords.contains(where: nickname.lowercased().contains) {
print(“昵称包含保留关键字”)
}

2.	重复字符和符号检测
•	避免昵称由相同字符重复组成,如 "aaaaa" 或 "11111"。
•	示例:

let pattern = “(.)\1{3,}” // 检测连续出现4次以上的字符
let regex = NSPredicate(format: “SELF MATCHES %@”, pattern)
if regex.evaluate(with: nickname) {
print(“昵称不能包含重复字符”)
}

3.	表情符号和 Unicode 字符检测
•	防止昵称包含 emoji 或特殊 Unicode 字符。
•	示例:

if nickname.contains(where: { $0.unicodeScalars.contains(where: { $0.properties.isEmoji }) }) {
print(“昵称不能包含表情符号”)
}

5. 性能优化建议

1.	正则表达式组合优化
•	将所有规则整合到一个正则表达式中,减少多次遍历和判断。
2.	批量过滤处理
•	提前加载敏感词库和关键词列表到内存中,提高检测速度。
3.	服务端二次校验
•	除客户端校验外,服务器端必须进行再次校验,确保数据安全。

6. 校验规则总结

校验类型 检查规则
长度 最小 2 字符,最大 20 字符。
字符类型 支持字母、数字、下划线、中文,不允许特殊字符或表情符号。
敏感词检测 过滤脏话、政治敏感词、联系方式或广告词。
重复性检测 确保昵称唯一,忽略大小写比较。
关键字检查 禁止包含 “admin”、“root” 等系统保留字。
格式限制 不允许昵称以空格开头或结尾,不允许连续重复字符。
动态词库更新 提供敏感词库动态更新机制,适配多种语言和特殊场景需求。

7. 提示用户输入友好反馈

•	输入限制实时提示: 在输入时实时显示不合格原因,如长度不足或包含非法字符。
•	格式错误引导: 提供示例或预设格式,例如 “昵称仅支持汉字、字母、数字或下划线”。
•	唯一性检测延迟校验: 实时检测唯一性可以延迟到提交按钮点击时进行,减少服务器压力。

8. 总结

1.	基本规则: 校验长度、字符类型和格式。
2.	敏感检测: 过滤广告、联系方式和敏感词汇,确保安全。
3.	唯一性: 实时检查重复性,防止重复注册。
4.	用户体验: 提供友好提示和输入建议,降低用户输入错误率。

推荐实践:

•	客户端快速校验 + 服务端二次验证,确保安全性和一致性。
•	动态维护敏感词库,适应不同市场和需求。

  1. a-zA-Z0-9_\u4e00-\u9fa5\s ↩︎


http://www.kler.cn/a/502608.html

相关文章:

  • 计算机网络速成
  • 【Uniapp-Vue3】页面生命周期onLoad和onReady
  • uniApp通过xgplayer(西瓜播放器)接入视频实时监控
  • Julia语言的数据结构
  • 51c大模型~合集104
  • Qt 坐标系统和坐标变换
  • 深度可分离卷积在卷积神经网络中的作用
  • mobaxterm内置编辑器中文出现乱码如何解决:直接更换编辑器为本地编辑器
  • 数据处理之计算文本相似度|余弦相似度|欧氏距离
  • 从 PostgreSQL 中挽救损坏的表
  • Linux-shell练习
  • Kafka集群数据完整性保障:有效防止数据丢失
  • Bert及Deberta、Roberta的简介
  • mongoDB全量备份和恢复
  • 前端笔记----
  • PPT素材免费下载
  • 利用ffmpeg将视频转为m3u8并加密
  • 通过Apache、Nginx限制直接访问public下的静态文件
  • 数据结构与算法之栈: LeetCode 71. 简化路径 (Ts版)
  • 介绍PyTorch张量
  • OpenCV基于均值漂移算法(pyrMeanShiftFiltering)的水彩画特效
  • 自动化运维:提升效率与可靠性的利器
  • 如何检查Mac电脑是否已安装Python环境
  • 运维加薪技术——微服务拆分规范
  • Python编程中的两种主要的编程模式
  • 插入图层到地图文档