首页 > 解决方案 > RegEx 仅匹配数字和最多 3 个字符

问题描述

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

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

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

应该返回真:

应该返回假:

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

标签: phpregexpreg-match

解决方案


有几件事:

  • 您只是在锚定^第一个替代方案。

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

  • 否则,第二种|\w{0,3}\s*选择可能会匹配任何地方(并且也会真正匹配一个空字符串)

  • \d+此外,使用而不是使其更具可读性[0-9]{1,}

  • 但更严格 for[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

推荐阅读