有人可以给我提示为什么以下RegEx不起作用吗?我正在尝试验证一个字符串,该字符串的开头或结尾必须至少包含一个数字0-9,并且最多包含3个字符(A-Z),包括空格。我尝试过:
^[0-9]{1,}\s*\w{0,3}|\w{0,3}\s*[0-9]{1,}
但是上面的RegEx匹配包含这些字符的所有内容。但是我想确保只有在我的字符串中不超过所需的字符和数字时,它才匹配。
应返回true:
应返回false:
如果有人可以给我提示,我将非常感激。
答案 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