-1

如果我只想包含不超过 31 的数字,这个正则表达式是否有效?

'[^0-9>31]+ 或者它也会返回字母字符,我也必须以某种方式排除它们?

4

2 回答 2

3

您的正则表达式接受一个或多个字符,每个字符都不是以下之一

0 1 2 3 4 5 6 7 8 9 >

你想要的是:

/^(?:[0-9]|[12][0-9]|3[01])$/
于 2012-12-11T22:43:59.500 回答
1

正则表达式不是文本的声波螺丝刀,能够神奇地做你可能想要的一切。正则表达式中没有任何内容可以检查数字的值。

您需要做的是两个步骤,这里用 Perl 编写。

$ok = ($s =~ /^\d{1,2}$/) && ($s < 31);

这将检查$s字符串开头 ( ^)、一位或两位数字 ( \d{1,2}) 以及字符串结尾 ( $) 的值。如果这是真的,那么它还会检查 的数值$s是否小于 31。

是的,您可以使用 Ray Toal 的回答中这样的复杂正则表达式:

/^(?:[0-9]|[12][0-9]|3[01])$/

但这远不那么可读。

于 2012-12-11T22:51:36.570 回答