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

昵称 校验

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 ↩︎

相关文章:

昵称 校验

1. 基本格式校验 1. 长度限制 • 设置最小和最大字符长度&#xff1a;2-20 个字符&#xff08;常见范围&#xff09;。 • 避免昵称过短或过长影响显示和识别。 • 示例&#xff1a; • 2 ≤ 长度 ≤ 20&#xff1a;let minLength 2 let maxLength 20 if nickname.count <…...

MATLAB学习笔记目录

MATLAB学习笔记-生成纯音并保存-CSDN博客 MATLAB学习笔记-各种格式之间的转换 - 知乎 MATLAB学习笔记-胞组&#xff08;cell array&#xff09;转换为矩阵&#xff0c;cell2mat_matlab如何把元胞数组改为矩阵-CSDN博客MATLAB学习笔记-判断数组、结构体、数值、字符串是否相同…...

基于单片机的语音控制玩具汽车的设计

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

Qt WORD/PDF(五)使用Json一键填充Word表格

关于QT Widget 其它文章请点击这里: QT Widget 国际站点 GitHub: https://github.com/chenchuhan 国内站点 Gitee : https://gitee.com/chuck_chee 姊妹篇: 《Qt WORD/PDF&#xff08;一&#xff09;使用 QtPdfium库实现 PDF 操作》 《Qt WORD/PDF&#…...

vue3+ts的几个bug调试

由于编译问题&#xff0c;把几个type检查给关闭了&#xff0c;否则错误太多。 1&#xff09;第一个检查出的问题&#xff0c;拼写错误数组的length&#xff0c;写成了lengh。 2&#xff09;数组的对象引用。 torStatus Array(8).fill({ ...defaultStatus }) as TorStatus[]…...

DVWA靶场CSRF漏洞通关教程及源码审计

目录标题 CSRFlow源码审计 medium源码审计 high源码审计 impossible源码审计 CSRF low 先修改密码 看到地址栏 复制在另一个网页打开 成功登录 源码审计 没有任何过滤措施&#xff0c;很危险&#xff0c;并且采用了不安全的md5加密 <?phpif( isset( $_GET[ Change ] )…...

前端开发:HTML常见标签

1.注释标签 注释不会显示在界面上 . 目的是提高代码的可读性 . ctrl / 快捷键可以快速进行注释 / 取消注释 . <!-- 我是注释 --> 2.标题标签 有六个 , 从 h1 - h6. 数字越大 , 则字体越小 <h1> hello </h1> //我们所写的csdn的格式中的标题一…...

【机器学习】主动学习-增加标签的操作方法-样本池采样(Pool-Based Sampling)

Pool-Based Sampling Pool-based sampling 是一种主动学习&#xff08;Active Learning&#xff09;方法&#xff0c;与流式选择性采样不同&#xff0c;它假设有一个预先定义的未标注样本池&#xff0c;算法从中选择最有价值的样本进行标注&#xff0c;以提升模型的性能。这种…...

【Rust自学】11.9. 单元测试

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 11.9.1. 测试的分类 Rust把测试分为两类&#xff0c;一个是单元测试&#xff0c;一个是集成测试。 单元测试比较小也比较专注&#xff…...

深入理解Web存储机制:Cookie、SessionStorage与LocalStorage的区别

文章目录 前言一、Cookie简介二、SessionStorage简介三、LocalStorage简介四、三者之间的比较五、最佳实践建议结语 前言 随着Web应用程序变得越来越复杂&#xff0c;开发者需要更有效的办法来管理客户端数据。Cookie、SessionStorage和LocalStorage是三种常用的Web存储机制&a…...

SpringBoot之BeanDefinitionLoader类源码学习

该类的作用 Spring 框架中用于加载和解析 Bean 定义的工具类。它主要用于从不同的资源&#xff08;如 XML 文件、注解、Java 配置类等&#xff09;中读取 Bean 定义&#xff0c;并将这些定义注册到 Spring 的 BeanFactory 或 ApplicationContext 中 基本属性 //指定的资源pri…...

【芯片封测学习专栏 -- 2D | 2.5D | 3D 封装的区别和联系】

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

从硬件设备看Linux

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

open3d+opencv实现矩形框裁剪点云操作(C++)

&#x1f451;主页&#xff1a;吾名招财 &#x1f453;简介&#xff1a;工科学硕&#xff0c;研究方向机器视觉&#xff0c;爱好较广泛… ​&#x1f4ab;签名&#xff1a;面朝大海&#xff0c;春暖花开&#xff01; open3dopencv实现矩形框裁剪点云操作&#xff08;C&#xff…...

git 本地操作

一、git.vscode 撤回本地提交 要在Git中撤销本地的最后一次提交&#xff0c;可以使用以下命令&#xff1a; git reset --soft HEAD^ 这将会撤销最后一次的提交&#xff0c;但是保留工作区以及暂存区的内容&#xff0c;方便重新提交。 如果你想完全撤销最后一次提交&#xf…...

PL/SQL语言的文件操作

PL/SQL语言的文件操作 PL/SQL&#xff08;Procedural Language/SQL&#xff09;是Oracle公司开发的一种过程化扩展SQL的语言&#xff0c;广泛应用于Oracle数据库的开发和管理。PL/SQL不仅支持SQL指令&#xff0c;还支持过程化编程&#xff0c;例如条件控制、循环控制、异常处理…...

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进阶

目录 第一课&#xff1a;Vue方法、计算机属性及侦听器 一、数组变化侦测 方法1&#xff1a;变更方法 方法2&#xff1a;替换一个数组 例子&#xff1a;小Demo:合并两个数组 二、计算属性 1.基础&#xff08;不推荐&#xff09; 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...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

&#x1f9e0; 智能合约中的数据是如何在区块链中保持一致的&#xff1f; 为什么所有区块链节点都能得出相同结果&#xff1f;合约调用这么复杂&#xff0c;状态真能保持一致吗&#xff1f;本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Ingress是一个API对象&#xff0c;它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress&#xff0c;你可…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat&#xff08;I/O Statistics&#xff09;是Linux系统下用于监视系统输入输出设备和CPU使…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...

云原生玩法三问:构建自定义开发环境

云原生玩法三问&#xff1a;构建自定义开发环境 引言 临时运维一个古董项目&#xff0c;无文档&#xff0c;无环境&#xff0c;无交接人&#xff0c;俗称三无。 运行设备的环境老&#xff0c;本地环境版本高&#xff0c;ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...