如果我只想包含不超过 31 的数字,这个正则表达式是否有效?
'[^0-9>31]+ 或者它也会返回字母字符,我也必须以某种方式排除它们?
您的正则表达式接受一个或多个字符,每个字符都不是以下之一
0 1 2 3 4 5 6 7 8 9 >
你想要的是:
/^(?:[0-9]|[12][0-9]|3[01])$/
正则表达式不是文本的声波螺丝刀,能够神奇地做你可能想要的一切。正则表达式中没有任何内容可以检查数字的值。
您需要做的是两个步骤,这里用 Perl 编写。
$ok = ($s =~ /^\d{1,2}$/) && ($s < 31);
这将检查$s
字符串开头 ( ^
)、一位或两位数字 ( \d{1,2}
) 以及字符串结尾 ( $
) 的值。如果这是真的,那么它还会检查 的数值$s
是否小于 31。
是的,您可以使用 Ray Toal 的回答中这样的复杂正则表达式:
/^(?:[0-9]|[12][0-9]|3[01])$/
但这远不那么可读。