用于仅匹配数字和最多 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正确:
- 9 aaa
- 99244 aaa
- 美国广播公司 321
- 9A
应该return错误:
- 9999 fjejdhshsh 哑
- 9嘟嘟嘟
- Hdjdjso djs 99
如果有人能给我提示,我将不胜感激。
有几件事:
您只是在锚定^
第一个备选方案。
如果您想断言整个字符串,您可能也应该使用 $
。
否则第二个 |\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
有人可以提示我为什么以下 RegEx 不起作用吗?我正在尝试验证一个字符串,该字符串的开头或结尾必须至少包含一个数字 0-9,并且最多包含 3 个字符 (A-Z) 并包括空格。我试过:
^[0-9]{1,}\s*\w{0,3}|\w{0,3}\s*[0-9]{1,}
但上面的 RegEx 匹配包含这些字符的所有内容。但我想确保它仅在我的字符串中不超过所需字符和数字时才匹配。
应该return正确:
- 9 aaa
- 99244 aaa
- 美国广播公司 321
- 9A
应该return错误:
- 9999 fjejdhshsh 哑
- 9嘟嘟嘟
- Hdjdjso djs 99
如果有人能给我提示,我将不胜感激。
有几件事:
您只是在锚定
^
第一个备选方案。如果您想断言整个字符串,您可能也应该使用
$
。否则第二个
|\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