$var = 3;
if ($cleanvar = preg_match('/^[0-9]{0,2}$/', $var))
{
echo $cleanvar; echo $var; exit();
}
else
. . .
奇怪的输出。这导致我的cleanvar
回显1
,而var
仍然回显3
。为什么会这样?此regex
的要点是仅匹配整数,即1或2位数。例如(1,2,4,38,24)
他们在我的正则表达式中存在问题吗?或者是什么导致了这种奇怪的行为?
答案 0 :(得分:3)
$cleanvar
只是真或假。你正在寻找一个0到2位数字的数字(从字符串的开头到结尾,所以不允许其他字符。)
编辑:如果匹配则返回1,否则返回0.
有关详情,请参阅此处:http://us3.php.net/preg_match
答案 1 :(得分:0)
$var
后面应该跟一个数组。如果匹配> = 1,您可能希望更改为{1,2}
。
答案 2 :(得分:0)
你的正则表达式是正确的,它匹配正确。只是如果你得到一个匹配,preg_match返回1,如果没有,则返回0。请参阅documentation.
答案 3 :(得分:0)
如果您尝试验证输入值,则只需查看preg_match
的返回值。使用+
运算符匹配“前面一个或多个元素。”
if (preg_match('/^[0-9]+$/', $var)) {
// we matched a number only, so we know $var is clean
} else {
}
如果需要从输入字段中提取数字,可以使用捕获组:
if (preg_match('/([0-9]+)/', $var, $matches)) {
$num = $matches[1];
} else {
}
请注意,这与整个输入不匹配,但会返回它在输入$var
中找到的第一个数字。