【问题标题】:Fail Matches when a Character Appears Six Times in a Row当一个角色连续出现六次时匹配失败
【发布时间】:2014-07-23 23:44:18
【问题描述】:

我想验证一个可变长度的字符串 - 一个 VIN 号。我想确保它只包含字母数字字符并且长度在 9 到 15 位之间。但是,我还想确保字符串中没有六个或更多字母数字字符的序列。我正在使用 .NET 的正则表达式引擎。

00THZY7564TTX --> should pass validation
X0000000TEVBV --> should fail validation

我查看了许多帖子,但我似乎无法 100% 降低它。目前,我有

(?<!(0){5,}.*)(?!.*(0){5,}.*)[A-Za-z0-9]{1,}

但它似乎忽略了字符串中的零(在上面的示例 #2 中,它与 0000TEVBV 部分匹配)。

我做错了什么?

提前致谢!!

【问题讨论】:

  • a sequence of six or more alphanumeric characters 你的意思是 6 个或更多的 SAME 字符(比如六个 A 字符)?
  • 是的,你猜对了:)

标签: .net regex regex-lookarounds repeat


【解决方案1】:

使用这个正则表达式:

^(?!.*(\d)\1{5})[A-Z0-9]{9,15}$

查看 the regex demo 中的匹配项。

  • [A-Z0-9]{9,15} 允许 9 到 15 个大写字母或数字
  • 不允许一个字符(例如A)出现在六序列中,例如AAAAAA
  • ^ 锚断言我们位于字符串的开头
  • $ 锚断言我们在字符串的末尾

【讨论】:

  • 仅供参考,您对a sequence of six or more alphanumeric characters 的意思做了一个假设——如果您需要任何调整,请告诉我。 :)
  • 谢谢,很高兴它有帮助。 :)
  • 我不是 100% 确定,但我认为 .net XSD 正则表达式不使用前瞻。有什么办法可以在不使用环视的情况下解决这个问题?
  • 嗯,如果它是 .NET 正则表达式,那么肯定支持前瞻。
  • 它们通常是,但是在 XSD 文档中使用它时,它不起作用。根据约翰在这里social.msdn.microsoft.com/Forums/en-US/… 的回答,看起来不支持环视功能。
猜你喜欢
  • 2023-03-19
  • 2016-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多