【问题标题】:RegEx for matching only digits and a maximum of 3 charactersRegEx 仅匹配数字和最多 3 个字符
【发布时间】:2019-02-13 03:41:03
【问题描述】:

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

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

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

应该返回真:

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

应该返回 false:

  • 9999 fjejdhshsh 哑巴
  • 9嘟嘟嘟
  • Hdjdjso djs 99

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

【问题讨论】:

标签: php regex preg-match


【解决方案1】:

有几件事:

  • 你只是锚定^第一个选项。

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

  • 否则第二个 |\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

【讨论】:

  • 感谢马里奥,你为我节省了几个小时。我的最终版本是这个:/(^\d+\s*[A-Za-z]{0,2}|^[A-Za-z]{0,2}\s*\d+)$/uisx
猜你喜欢
  • 2018-04-14
  • 2015-06-11
  • 2018-06-07
  • 2020-03-05
  • 2018-03-28
  • 2013-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多