RegEx仅可匹配数字和最多3个字符

时间:2018-09-07 19:11:27

标签: php regex preg-match

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

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

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

应返回true:

  • 9 aaa
  • 99244 aaa
  • ABC 321
  • 9A

应返回false:

  • 9999 fjejdhshsh dud
  • 9杜都du
  • Hdjdjso djs 99

如果有人可以给我提示,我将非常感激。

1 个答案:

答案 0 :(得分:1)

有几件事:

  • 您仅是第一种选择的锚定^

  • 如果要声明整个字符串,则可能还应该使用$

  • 否则,第二个|\w{0,3}\s*替代项可能在任何地方都匹配 (并且也实际上会匹配一个空字符串)

  • 此外,使用\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