如何使用正则表达式验证用户名?

2023-12-07

这似乎符合我定义的规则,但我今晚才开始学习正则表达式,所以我想知道它是否正确。

Rules:

  • 用户名可以由小写字母组成 和首都
  • 用户名可以由字母数字组成 人物
  • 用户名可以包含下划线 以及连字符和空格
  • 不能是两个下划线和连字符 或连续两个空格
  • 不能有下划线、连字符或 开头或结尾的空格

正则表达式模式:

/^[a-zA-Z0-9]+([a-zA-Z0-9](_|-| )[a-zA-Z0-9])*[a-zA-Z0-9]+$/

问题中的规范不是很清楚,所以我假设字符串只能包含 ASCII 字母和数字,并使用连字符、下划线和空格作为内部分隔符。问题的实质是确保第一个和最后一个字符不是分隔符,并且一行中永远不会有多个分隔符(无论如何,这部分似乎很清楚)。这是最简单的方法:

/^[A-Za-z0-9]+(?:[ _-][A-Za-z0-9]+)*$/

匹配一个或多个字母数字字符后,if有一个分隔符must后跟一个或多个字母数字;根据需要重复。

让我们看看其他一些答案中的正则表达式。

/^[[:alnum:]]+(?:[-_ ]?[[:alnum:]]+)*$/

这实际上是相同的(假设您的正则表达式风格支持 POSIX 字符类表示法),但为什么要使分隔符可选呢?您首先出现在正则表达式的该部分的唯一原因是是否存在分隔符或其他无效字符。

/^[a-zA-Z0-9]+([_\s\-]?[a-zA-Z0-9])*$/

另一方面,这只适用于because分隔符是可选的。在第一个分隔符之后,它一次只能匹配一个字母数字。为了匹配更多,它必须不断重复整个组:零分隔符后跟一个字母数字,一遍又一遍。如果第二个[a-zA-Z0-9]后面跟着一个加号,它可以通过更直接的路线找到匹配项。

/^[a-zA-Z0-9][a-zA-Z0-9_\s\-]*[a-zA-Z0-9](?<![_\s\-]{2,}.*)$/

这使用了无限制的后向查找,这是一个非常罕见的功能,但是您可以使用前向查找来达到相同的效果:

/^(?!.*[_\s-]{2,})[a-zA-Z0-9][a-zA-Z0-9_\s\-]*[a-zA-Z0-9]$/

这实际上对两个连续的分隔符执行单独的搜索,如果找到一个则匹配失败。然后主体只需要确保所有字符都是字母数字或分隔符,第一个和最后一个是字母数字。由于这两个字符是必需的,因此名称的长度必须至少为两个字符。

/^[a-zA-Z0-9]+([a-zA-Z0-9](_|-| )[a-zA-Z0-9])*[a-zA-Z0-9]+$/

这是您自己的正则表达式,它要求字符串以两个字母数字字符开头和结尾,如果字符串中有两个分隔符,则它们之间必须恰好有两个字母数字。所以ab, ab-cd and ab-cd-ef会匹配,但是a, a-b and a-b-c won't.

此外,正如一些评论者所指出的,(_|-| )在你的正则表达式中应该是[-_ ]。那部分不是不正确,但是如果您可以在交替和字符类之间进行选择,那么您应该始终选择字符类:它们更高效且更具可读性。

再说一次,我并不担心“字母数字”是否应该包含非 ASCII 字符,或者“空格”的确切含义,而只是担心如何使用正则表达式强制执行非连续内部分隔符的策略。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用正则表达式验证用户名? 的相关文章

随机推荐

  • EF 代码优先 - 配置一对零或一关系,无需共享 PK/FK

    我正在尝试在两个实体之间建立一对零或一的关系 并且我希望依赖实体仍包含其自己的 Indentity 列 而不是共享密钥 我想尽可能遵循约定 而不是显式声明任何不需要显式声明的内容 因此 不不必要数据注释或 Fluent api 子句 实体
  • .net JSON 日期格式

    作为 net 服务的响应 我得到以下日期格式 日期 1233323754523 0100 1233323754523 是时间戳格式的日期 但我不知道 0100 是什么意思以及如何从java代码生成它 Thanks 我假设时间戳采用 UTC
  • React Native无法连接到Android中的SSE

    我正在使用该包 https www npmjs com package react native sse 即使我从文档中复制粘贴代码 我也无法设法从 android 中的服务器接收事件 import EventSource from rea
  • 在谷歌地图中设置城市周围的边界

    我正在寻找一种使用 JavaScript 在 Google 地图 API V3 中设置特定城市 城镇周围边界的方法 API 中是否支持这种类型的事情 基本上 我不希望我的用户能够比城市更远地平移地图 包括乡村地区而不仅仅是城市范围 那么您想
  • 用 Java 下载文件。多线程,这有效吗?

    首先 每个人都需要知道我对 Java 编码还比较陌生 更准确地说 我对面向对象编程完全陌生 对于这个问题 我正在尝试创建一个下载类来更新进度条以显示其进度 可能还有我决定将来更新的其他内容 目前的问题是 在我看来 这不应该起作用 我可以在
  • 如何检查用户是否在 Firebase 和 Express/Node.js 中经过身份验证?

    如果我有一个页面只能由经过身份验证的用户访问 我如何检查用户是否经过身份验证 我尝试使用 firebase auth currentUser null 但我收到一条错误消息 TypeError firebase auth is not a
  • Pyplot 在缩放时保持文本大小

    我想在 pyplot 图中包含一些文本 并且能够在不改变比例的情况下放大它 请参阅下面的情节示例 我希望发生什么以及实际发生了什么 重现错误的代码 import matplotlib pyplot as plt plt plot 0 0 1
  • 如何从clickhouse中的json中提取json?

    我的基地有一个 json a 1 b 2 c d 3 e str 1 d 4 e str 2 我需要获取每个键的所有唯一值 但在提取键 d 和键 e 的值时遇到一些问题 Using SELECT DISTINCT JSONExtractRa
  • 如何改变gitbook的代码填充效果?

    这是stackoverflow的markdown代码效果 Code from stackoverflow Nearly no extra space at the beginning And this is the markdown cod
  • php $_SESSION 变量随机消失和重新出现

    Preface 这是一个 发展 之前的一个问题我的 他的答案最终没有解决我的问题 但是通过尝试所有建议并尝试其他东西 我发现真正的问题是别的东西 所以我在这里重新表述我的问题 我有一个登录页面 系统 多年来一直正常工作 让用户保持登录状态
  • 使用 Swift 迭代 Firebase 中的嵌套快照子项

    我正在尝试循环遍历 Firebase 数据库中的子级以检索嵌套键 我的数据库结构如下 Users Username Favorites Location Latitude 123 LocationName San Francisco Lon
  • 如何将包含基于位置的数据的列添加到 R 中的 SpatialPolygonsDataFrame 中?

    我在 R 中有空间数据 它作为SpatialPolygonsDataFrame library sp library tmap d lt readRDS data rds qtm d 例如 我使用了德国的数据http www gadm or
  • 在 Chrome 中自动录制语音输入

    我正在尝试自动记录 Google 中的语音语音输入 仅适用于 Chrome 事实上 用户必须单击麦克风才能开始录音 但我正在进行一个用户不会与计算机交互的安装 因此我必须以其他方式触发录制 就目前看来 您无法通过代码访问语音输入功能 即您无
  • 如何使用 eyed3 从 python 中的 .mp3 文件获取详细信息(标题、艺术家)

    这是我的代码 import eyed3 audiofile eyed3 load 19 Calvin Harris Summer mp3 print audiofile tag artist 这是一个错误 Traceback most re
  • 提交后保留所选值

    我有一个时间下拉选择 我想在按下提交按钮后保留所选值 此处为 HTML
  • 如何阅读PHP手册中的函数定义

    我正在浏览下面这个函数的 PHP 文档 并试图理解第二个参数之前的 是什么意思 string basename string path string suffix 为什么不简单地提及如下 string basename string pat
  • 如何找到 SwiftUI UIViewRepresentable 的框架

    我正在尝试包装一个自定义子类UILabel in UIViewRepresentable在 SwiftUI 中使用它 我在用着 sizeToFit并打印框架 当它在包装中时看起来是正确的 func makeUIView context Co
  • SML 类型推断的提示

    我是 SML 的新手 我正在尝试练习 SML 类型参考 我正在尝试演绎以下类型 a fun add42 x x 42 b fun comp F G let fun C x G F x in C end c fun compA42 x com
  • Maven 在 Spring 项目构建中尝试与数据库建立连接失败

    我为我的 spring 项目制作了 docker compose 和 dockerfile 但它在 Maven 构建阶段失败 因为正在尝试与 postgres 服务建立连接 我不知道如何解决它 这是我的 docker compose 文件
  • 如何使用正则表达式验证用户名?

    这似乎符合我定义的规则 但我今晚才开始学习正则表达式 所以我想知道它是否正确 Rules 用户名可以由小写字母组成 和首都 用户名可以由字母数字组成 人物 用户名可以包含下划线 以及连字符和空格 不能是两个下划线和连字符 或连续两个空格 不