条件正则表达式以匹配特定模式或其他任何内容

Conditional Regular Expression to match a specific pattern or anything else

我无法解决这个问题。 我需要一个正则表达式来检查用户输入(文本字段)的以下内容:

测试用例:

Invalid: "LEG181234 & 123678 & LEG"
Invalid: "hello 012345 world"
Valid: "hello LEG012345 world"
Valid: "LEG123456"
Valid: "Not Legged"
Valid: "01234"

所以我已经处理了这个表达式:

(?<=[LEG])([0-9]{6})

如果找到 6 个数字,它会向后看是否有 LEG。但是从那里我被困住了,因为我不确定我怎么能说 "match anything else except 6 digits"。

希望得到任何帮助!

您可以像这样测试您的输入是否无效:

(?<!LEG)\d{6}

只要有匹配项,就意味着有 6 个数字前面没有 LEG。因此,根据您的测试用例,前两个将 return 匹配。

现在,您没有提供任何其他案例,但我想知道是否还有更多。例如:

BOOTLEG123456
LEG123456ABC

这些允许吗?如果没有,那么您可以使用 word boundary anchor \b 并添加两个检查:

(?<!LEG)\d{6}|\BLEG\d{6}|LEG\d{6}\B

因此,除了第一个 (?<!LEG)\d{6},现在还有第二个 \BLEG\d{6} 用于查找您接受的格式之前的无效字符,第三个 LEG\d{6}\B 匹配存在末尾的无效字符数。