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(“昵称不能以空格开头或结尾”)
}
- 敏感内容过滤
- 敏感词过滤
• 防止昵称包含不良用语、辱骂性语言或敏感词汇。
• 示例:
• 使用敏感词库比对:加载敏感词列表,对昵称进行关键词匹配检查。 - 广告和联系方式检测
• 避免昵称包含手机号、邮箱、网址或营销信息,以防恶意推广。
• 示例:
- 敏感词过滤
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. 用户体验: 提供友好提示和输入建议,降低用户输入错误率。
推荐实践:
• 客户端快速校验 + 服务端二次验证,确保安全性和一致性。
• 动态维护敏感词库,适应不同市场和需求。
a-zA-Z0-9_\u4e00-\u9fa5\s ↩︎