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