用于仅匹配数字和最多 3 个字符的正则表达式

RegEx for matching only digits and a maximum of 3 characters

有人可以提示我为什么以下 RegEx 不起作用吗?我正在尝试验证一个字符串,该字符串的开头或结尾必须至少包含一个数字 0-9,并且最多包含 3 个字符 (A-Z) 并包括空格。我试过:

^[0-9]{1,}\s*\w{0,3}|\w{0,3}\s*[0-9]{1,}

但上面的 RegEx 匹配包含这些字符的所有内容。但我想确保它仅在我的字符串中不超过所需字符和数字时才匹配。

应该return正确:

应该return错误:

如果有人能给我提示,我将不胜感激。

有几件事:

  • 您只是在锚定^第一个备选方案。

  • 如果您想断言整个字符串,您可能也应该使用 $

  • 否则第二个 |\w{0,3}\s* 可能匹配 anywhere (并且也确实匹配空字符串)

  • 此外,使用 \d+ 而不是 [0-9]{1,}

  • 使其更具可读性
  • 但是 [A-Z][0,3}\w 更严格(可能匹配数字)。

所以本质上:

/^(
     \d+ \s* [A-Z]{0,3}    # 123 ABC
  |
     [A-Z]{0,3} \s* \d+    # ABC 123
  )$
/ix   # /x flag for readability