昵称 校验
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...
手把手教你为WCH CH582移植CherryUSB主机栈(基于RT-Thread,含中断优化)
基于RT-Thread的WCH CH582 USB主机协议栈深度移植指南在嵌入式开发领域,USB主机功能的实现往往意味着设备能够直接连接各类USB外设,从简单的键盘鼠标到复杂的存储设备。对于使用WCH CH582这类RISC-V内核MCU的开发者而言,原厂SDK提供的USB主机…...
第3篇:系统透视——信息部门如何构建“税务友好型”IT架构
本篇导读:如果你是信息总监或IT负责人,请通读全文,尤其是“系统合规设计的三必须”和“现场检查SOP”;如果你是财税人员,请重点阅读“研产供销全链条的系统对接要求”和“与IT部门的协作要点”;如果你是老板…...
一次搞懂内存取证:用Volatility3和Cobalt Strike分析工具复现VNCTF‘来一把紧张刺激的CS’
实战内存取证:从Volatility3到Cobalt Strike信标分析全解析 在网络安全事件响应中,内存取证往往是发现高级威胁的最后一道防线。当攻击者使用文件无落地的技术时,传统的磁盘取证可能一无所获,而内存中却保留着攻击行为的完整痕迹。…...
SAP-ABAP:变量、常量、结构与内表声明(10篇博客合集) 第五篇:声明时的键值设计技巧:结构与内表的主键、非主键配置指南
变量、常量、结构与内表声明(10篇博客合集) 第五篇:声明时的键值设计技巧:结构与内表的主键、非主键配置指南如果把内表比作一张内存中的“数据库表”,那么键就是这张表的索引甚至主键。键的设计直接决定了数据的唯一性…...
[智能体-81]:工程化智能体 = 模型做脑力拆解 + 框架做流程落地。前者是决策者,后者是管理者,tools/function call是内部员工;mcp server是外部资源;
一、全角色人设 & 对应技术组件角色定位对应技术模块核心职责决策者(脑力大脑)大模型 LLM理解目标、任务拆解、逻辑判断、分支决策、内容生成,负责 “想方案、定步骤”管理者(流程总管)智能体编排框架(…...
HDI 高密度互连板阶数的深度理解
一、概述高密度互连板(High Density Interconnector, HDI)是通过激光微孔技术和逐层积层工艺实现高密度布线的印制电路板。其阶数划分是行业内统一的技术标准,核心依据为独立积层压合次数与配套激光盲孔制程次数,而非单面层数或钻…...
电信运营商每月处理海量工单,如何不再出错?基于AI Agent的端到端自动化解决方案
在2026年的电信行业,海量工单处理已不再仅仅是效率问题,而是合规与生存的底线。随着2026年5月20日《电信和互联网服务 基础电信企业网上营业厅服务规范》国家标准的正式实施,监管层对“信息透明、流程闭环、计费精准”的要求达到了前所未有的…...
UE5 Mac环境搭好了,然后呢?给新手的第一个5分钟:创建、操控并理解你的第一个角色
UE5 Mac环境搭好了,然后呢?给新手的第一个5分钟:创建、操控并理解你的第一个角色当你第一次打开UE5的Mac版本,面对那个闪烁着光芒的启动界面,内心可能既兴奋又忐忑。安装只是第一步,真正的旅程现在才开始。…...
基于MAX78000的医疗紧急呼叫系统:边缘AI与低功耗设计实战
1. 项目概述与核心价值大家好,我是Victor Hugo,一名电子工程师。今天我想和大家分享一个我最近完成并参与设计竞赛的项目:一个基于MAX78000 FTHR开发板的医疗紧急呼叫辅助系统。这个项目的核心,不是从零开始造一个新轮子ÿ…...
OpenIPC开源固件:5分钟解锁网络摄像头的终极控制权
OpenIPC开源固件:5分钟解锁网络摄像头的终极控制权 【免费下载链接】firmware Alternative IP Camera firmware from an open community 项目地址: https://gitcode.com/gh_mirrors/fir/firmware 还在为网络摄像头的封闭系统而烦恼吗?想要完全掌控…...
