【问题标题】:Finding a regex for an ID format with hyphens查找带有连字符的 ID 格式的正则表达式
【发布时间】:2019-09-21 11:56:00
【问题描述】:

我正在尝试使用正则表达式验证 id。 id 格式如下。

alphaNumeric-alphaNumeric-alphaNumeric(并且总长度应该是14,应该有两个连字符)

以下示例是有效格式

AS12-AS12-AB1C

AS-12ASBC-1234

N-IKNKL-A2LI40

这里的问题是连字符不应该出现在开头和结尾。而且两个连字符也不应该在一起。

到目前为止,我一直在使用正向预测来进行长度匹配 (?=^.{14}$)。并使用(?=^[^-]*-[^-]*-[^-]*$)[a-zA-Z0-9-]+ 匹配其他连字符逻辑。所以我使用的正则表达式是

(?=^.{12}$)(?=^[^-]*-[^-]*-[^-]*$)[a-zA-Z0-9-]+

这里的问题是连字符可以出现在开头和结尾,以及两个连字符可以一起出现,这两个连字符都不应该是有效的,这违反了我的 id 验证检查。

【问题讨论】:

  • 您使用的是哪种语言的正则表达式引擎?
  • 或者换句话说,你在输入中总是需要 2 个连字符吗?
  • 需要两个连字符。 @anubhava
  • 语言是 Kotlin @hjpotter92,但这有关系吗?我对正则表达式的了解很少。所以不确定正则表达式模式是否基于语言匹配。
  • @hjpotter92:你的正则表达式匹配___-___-___

标签: regex


【解决方案1】:

你可以使用这个正则表达式:

^(?=.{14}$)[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+){2}$

RegEx Demo

正则表达式详细信息:

  • ^:比赛开始
  • (?=.{14}$):前瞻条件断言我们有准确的 14 个输入字符
  • [a-zA-Z0-9]+:匹配 1 个或多个字母数字字符
  • (?::启动非捕获组
    • -:匹配连字符
    • [a-zA-Z0-9]+: 后跟 1 个或多个字母数字字符
  • ){2}:结束非捕获组。匹配该组的 2 个实例
  • $:比赛结束

【讨论】:

  • 很高兴知道。您也可以将lookahead 用作(?=.{14}$),因为无论如何我们稍后只会匹配字母数字和连字符。
  • 如果这是一个更好的解决方案,请您更新上面的答案
  • 这并不是真的更好,但有点短。更新答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-02
  • 1970-01-01
  • 2016-02-15
  • 1970-01-01
相关资源
最近更新 更多