字符串的正则表达式是最小长度为 6 的大写字母,以及最小长度为 6 和连字符且只有数字的大写字母

regex for strings that are Uppercase letters with numbers of minlength 6, and Uppercase letters with numbers of minlength 6 and hyphen and only number

目前我有这个正则表达式:

(?:\d+[A-Z]|[A-Z]+\d)[A-Z-\d]{6,}|[0-A9-Z]{6,}|[0-9]{6,}

我希望此正则表达式匹配段落中的任何“字符串”:

带数字且最小长度为 6 的大写字母

大写字母和带连字符的数字,最小长度为 6

仅限最小长度为 6 的数字。

上面的这个正则表达式有效,但它仍然只匹配字母,我想排除这个如何?

A1A1A1A1A1A1A1A1 --> should match
12222222222222DE --> should match
'PRODUKT', 'PRODUKT', 'NICKNAME', 'PRODUKTNAME' --> shouldn't match any of this but its matching
123456 --> should match
6203-5458 --> shouldn't match
234SS-4NNNAA --> should match

您可以使用

(?<![\dA-Z-])(?=[\dA-Z-]{6,})(?:[\d-]+[A-Z]|[A-Z-]+\d)[A-Z\d-]*|[0-9]{6,}

参见regex demo详情:

  • (?<![\dA-Z-]) - 紧靠左侧,不应有数字、大写字母或 -
  • (?=[\dA-Z-]{6,}) - 紧靠右边,必须有6个或更多数字,大写字母或-
  • (?:[\d-]+[A-Z]|[A-Z-]+\d)[A-Z\d-]* - 一个或多个数字或 - 然后是大写字母或一个或多个大写字母或连字符然后是数字然后是零个或多个大写字母、数字或连字符
  • | - 或
  • [0-9]{6,} - 六位数或更多。