昵称 校验
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 ↩︎
相关文章:
昵称 校验
1. 基本格式校验 1. 长度限制 • 设置最小和最大字符长度:2-20 个字符(常见范围)。 • 避免昵称过短或过长影响显示和识别。 • 示例: • 2 ≤ 长度 ≤ 20:let minLength 2 let maxLength 20 if nickname.count <…...
MATLAB学习笔记目录
MATLAB学习笔记-生成纯音并保存-CSDN博客 MATLAB学习笔记-各种格式之间的转换 - 知乎 MATLAB学习笔记-胞组(cell array)转换为矩阵,cell2mat_matlab如何把元胞数组改为矩阵-CSDN博客MATLAB学习笔记-判断数组、结构体、数值、字符串是否相同…...

基于单片机的语音控制玩具汽车的设计
语音控制小汽车选用了两个单片机、一个语音识别芯片、两个无线收发模块、一个电机驱动模块、两个电机、一个音频解码模块。语音控制端选用了一个语音识别芯片,实现了将声音信号转换成数字信号,再将数据传输给单片机的功能。小车端选用了单片机来控制电机…...

Qt WORD/PDF(五)使用Json一键填充Word表格
关于QT Widget 其它文章请点击这里: QT Widget 国际站点 GitHub: https://github.com/chenchuhan 国内站点 Gitee : https://gitee.com/chuck_chee 姊妹篇: 《Qt WORD/PDF(一)使用 QtPdfium库实现 PDF 操作》 《Qt WORD/PDF&#…...
vue3+ts的几个bug调试
由于编译问题,把几个type检查给关闭了,否则错误太多。 1)第一个检查出的问题,拼写错误数组的length,写成了lengh。 2)数组的对象引用。 torStatus Array(8).fill({ ...defaultStatus }) as TorStatus[]…...

DVWA靶场CSRF漏洞通关教程及源码审计
目录标题 CSRFlow源码审计 medium源码审计 high源码审计 impossible源码审计 CSRF low 先修改密码 看到地址栏 复制在另一个网页打开 成功登录 源码审计 没有任何过滤措施,很危险,并且采用了不安全的md5加密 <?phpif( isset( $_GET[ Change ] )…...
前端开发:HTML常见标签
1.注释标签 注释不会显示在界面上 . 目的是提高代码的可读性 . ctrl / 快捷键可以快速进行注释 / 取消注释 . <!-- 我是注释 --> 2.标题标签 有六个 , 从 h1 - h6. 数字越大 , 则字体越小 <h1> hello </h1> //我们所写的csdn的格式中的标题一…...
【机器学习】主动学习-增加标签的操作方法-样本池采样(Pool-Based Sampling)
Pool-Based Sampling Pool-based sampling 是一种主动学习(Active Learning)方法,与流式选择性采样不同,它假设有一个预先定义的未标注样本池,算法从中选择最有价值的样本进行标注,以提升模型的性能。这种…...

【Rust自学】11.9. 单元测试
喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 11.9.1. 测试的分类 Rust把测试分为两类,一个是单元测试,一个是集成测试。 单元测试比较小也比较专注ÿ…...
深入理解Web存储机制:Cookie、SessionStorage与LocalStorage的区别
文章目录 前言一、Cookie简介二、SessionStorage简介三、LocalStorage简介四、三者之间的比较五、最佳实践建议结语 前言 随着Web应用程序变得越来越复杂,开发者需要更有效的办法来管理客户端数据。Cookie、SessionStorage和LocalStorage是三种常用的Web存储机制&a…...
SpringBoot之BeanDefinitionLoader类源码学习
该类的作用 Spring 框架中用于加载和解析 Bean 定义的工具类。它主要用于从不同的资源(如 XML 文件、注解、Java 配置类等)中读取 Bean 定义,并将这些定义注册到 Spring 的 BeanFactory 或 ApplicationContext 中 基本属性 //指定的资源pri…...

【芯片封测学习专栏 -- 2D | 2.5D | 3D 封装的区别和联系】
请阅读【嵌入式开发学习必备专栏 Cache | MMU | AMBA BUS | CoreSight | Trace32 | CoreLink | ARM GCC | CSH】 文章目录 Overview线键合(wire-bonding)封装FOWLP2D封装2.5D 封装硅通孔(TSV)硅中介层无TSV的2.5D 3D封装 Overview 我们先要了解一下&…...

从硬件设备看Linux
一、介绍 DM3730通过各种连接方式连接了各种设备,输入输出设备根据不同的类型大体可 以分为电源管理、用户输人、显示输出、图像采集、存储以及无线设备等。我们可以将DM 3730与这些设备的数据接口分为总线和单一的数据接口总线。总线的显著特点是单个总线上可以连…...

open3d+opencv实现矩形框裁剪点云操作(C++)
👑主页:吾名招财 👓简介:工科学硕,研究方向机器视觉,爱好较广泛… 💫签名:面朝大海,春暖花开! open3dopencv实现矩形框裁剪点云操作(Cÿ…...
git 本地操作
一、git.vscode 撤回本地提交 要在Git中撤销本地的最后一次提交,可以使用以下命令: git reset --soft HEAD^ 这将会撤销最后一次的提交,但是保留工作区以及暂存区的内容,方便重新提交。 如果你想完全撤销最后一次提交…...
PL/SQL语言的文件操作
PL/SQL语言的文件操作 PL/SQL(Procedural Language/SQL)是Oracle公司开发的一种过程化扩展SQL的语言,广泛应用于Oracle数据库的开发和管理。PL/SQL不仅支持SQL指令,还支持过程化编程,例如条件控制、循环控制、异常处理…...
linux lsof 和 fuser命令介绍
lsof 和 fuser 是两个在 Linux 系统中用于查看文件占用情况的重要工具。它们都可以用于查看哪些进程正在使用某些文件、设备或端口。下面是这两个命令的介绍、举例和背景。 lsof (List Open Files) 命令介绍: lsof 命令用于列出当前系统中所有打开的文件以及与之相关的进程。它…...

[Python学习日记-76] 网络编程中的 socket 开发 —— 介绍、工作流程、socket 模块用法和函数介绍
[Python学习日记-76] 网络编程中的 socket 开发 —— 介绍、工作流程、socket 模块用法和函数介绍 简介 socket 介绍 socket 的工作流程及用法 简介 前面在[Python学习日记-75] 计算机基础与网络当中介绍了一大堆基础知识之后我们终于开始进入到网络编程的开发阶段了&#x…...

vue(七) vue进阶
目录 第一课:Vue方法、计算机属性及侦听器 一、数组变化侦测 方法1:变更方法 方法2:替换一个数组 例子:小Demo:合并两个数组 二、计算属性 1.基础(不推荐) 2.使用计算属性来完成案例 3.使用函数的方…...

[Transformer] The Structure of GPT, Generative Pretrained Transformer
The Structure of Generative Pretrained Transformer Reference: The Transformer architecture of GPT models How GPT Models Work...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...

CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...

iview框架主题色的应用
1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题,无需引入,直接可…...

群晖NAS如何在虚拟机创建飞牛NAS
套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...