如何表达以下正则表达式?

How to express the following regex expression?

本人不太会正则表达式,以下是要求。 我将把它与 Joi 验证器一起使用。

编号:

姓名:

ID 的正则表达式:

^[-_]?(?:[A-Za-z0-9]+[-_]?)+$
  • [-_]? 也允许下划线或连字符出现在开头
  • [A-Za-z0-9]+ 匹配一个或多个字母数字字符
  • [-_]? 允许零个或一个连字符或下划线
  • 整个模式被包围在一个非捕获组和一个 + 中,表示它可能会重复一次或多次

因此确保不会连续出现 2 个连字符或下划线

Regex101 Demo

名称的正则表达式:

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

编辑:改进以修复出现在开头的下划线或连字符。感谢@ErikBrodyDreyer 的捕获! :)

([a-zA-Z0-9]*(_)?(?!\2)(\-)?(?!\3))+

这样就可以了 它也会匹配 -_ prefix

ID : ^(?!.*([_-]))[\w-]+$

姓名: ^(?!.*([_-]))[\w -]+$

一个\w[A-Za-z0-9_]一样,所以包含下划线

(?!.*([_-])) 是一个否定先行,不允许在字符串 ^.

开始后使用双破折号或双下划线