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

时间:2018-04-20 01:59:22

标签: regex regex-negation regex-lookarounds regex-group

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

  • 只要有直接的6位数字(123456而非123,456$1234.56),就必须在LEG之前(仅限大写) )。如果不在LEG之前,则输入无效
  • 如果没有与上述内容匹配的内容,则有效

测试用例:

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。但是从那里开始我就被卡住了,因为我不确定我怎么说'#34;匹配除了6位数以外的任何其他东西&#34;。

会喜欢任何帮助!

1 个答案:

答案 0 :(得分:2)

您可以测试您的输入,看看它是否有效:

(?<!LEG)\d{6}

每当匹配时,这意味着有6个连续数字前面没有LEG。因此,从您的测试用例中,前两个将返回匹配。

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

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匹配无效字符的存在最后的人物。