如何表达以下正则表达式?
How to express the following regex expression?
本人不太会正则表达式,以下是要求。
我将把它与 Joi 验证器一起使用。
编号:
- 应该是字母数字
- 除破折号和下划线(- 和 _)外不能有任何特殊字符
- 不能连续有 - 或 _(例如:this-id 可以,但 this--id 不行。
姓名:
- 应该是字母数字
- 除破折号和下划线(- 和 _)外不能有任何特殊字符,但允许 space。
- 不能连续有 - 或 _(例如:this-id 可以,但 this--id 不行。
ID 的正则表达式:
^[-_]?(?:[A-Za-z0-9]+[-_]?)+$
[-_]?
也允许下划线或连字符出现在开头
[A-Za-z0-9]+
匹配一个或多个字母数字字符
[-_]?
允许零个或一个连字符或下划线
- 整个模式被包围在一个非捕获组和一个
+
中,表示它可能会重复一次或多次
因此确保不会连续出现 2 个连字符或下划线
名称的正则表达式:
^[-_]?(?:[A-Za-z0-9 ]+[-_]?)+$
编辑:改进以修复出现在开头的下划线或连字符。感谢@ErikBrodyDreyer 的捕获! :)
([a-zA-Z0-9]*(_)?(?!\2)(\-)?(?!\3))+
这样就可以了
它也会匹配 -_ prefix
ID : ^(?!.*([_-]))[\w-]+$
姓名: ^(?!.*([_-]))[\w -]+$
一个\w
和[A-Za-z0-9_]
一样,所以包含下划线
(?!.*([_-]))
是一个否定先行,不允许在字符串 ^
.
开始后使用双破折号或双下划线
本人不太会正则表达式,以下是要求。 我将把它与 Joi 验证器一起使用。
编号:
- 应该是字母数字
- 除破折号和下划线(- 和 _)外不能有任何特殊字符
- 不能连续有 - 或 _(例如:this-id 可以,但 this--id 不行。
姓名:
- 应该是字母数字
- 除破折号和下划线(- 和 _)外不能有任何特殊字符,但允许 space。
- 不能连续有 - 或 _(例如:this-id 可以,但 this--id 不行。
ID 的正则表达式:
^[-_]?(?:[A-Za-z0-9]+[-_]?)+$
[-_]?
也允许下划线或连字符出现在开头[A-Za-z0-9]+
匹配一个或多个字母数字字符[-_]?
允许零个或一个连字符或下划线- 整个模式被包围在一个非捕获组和一个
+
中,表示它可能会重复一次或多次
因此确保不会连续出现 2 个连字符或下划线
名称的正则表达式:
^[-_]?(?:[A-Za-z0-9 ]+[-_]?)+$
编辑:改进以修复出现在开头的下划线或连字符。感谢@ErikBrodyDreyer 的捕获! :)
([a-zA-Z0-9]*(_)?(?!\2)(\-)?(?!\3))+
这样就可以了 它也会匹配 -_ prefix
ID : ^(?!.*([_-]))[\w-]+$
姓名: ^(?!.*([_-]))[\w -]+$
一个\w
和[A-Za-z0-9_]
一样,所以包含下划线
(?!.*([_-]))
是一个否定先行,不允许在字符串 ^
.