2012-10-12 89 views
0
 $var = 3; 
     if ($cleanvar = preg_match('/^[0-9]{0,2}$/', $var)) 
      { 
       echo $cleanvar; echo $var; exit(); 
      } 
     else 
       . . . 

奇怪的输出。这导致我的cleanvar回音1var仍然回声的3。这是为什么发生?这个regex的要点是只匹配整数,如1或2位数字。例如(1,2,4,38,24)这个preg_match怎么回事?

他们在我的正则表达式中的问题?或者是什么导致了这种奇怪的行为?

+0

这可能是值得注意的,这种模式将匹配空字符串。 – Wiseguy

+0

@wiseguy不,它不。假设你的意思是''作为空字符串。它返回false – fyz

+0

为什么不呢?主题开始,零数字,主题结束。 [工作示例](http://codepad.viper-7.com/YCGtLH) – Wiseguy

回答

3

$cleanvar只是对或错。您正在查找长度为0到2位数字的数字(从字符串的开始到结尾,因此不允许其他字符)。

编辑:如果匹配返回1,否则返回0。

有关更多信息,请参见本:http://us3.php.net/preg_match

+1

此外,比赛期望通过他们自己找到一行上的数字。不确定这是否意图,但如果真实数据包含的数字超过了空白,可能会导致错过。 – jheddings

+0

啊我明白了。这就说得通了。谢谢你清理那个。 – fyz

+0

@jdingdings,谢谢我更新了我的答案,包括你说的话。它不会允许比赛中的任何其他角色。 –

0

$var应遵循的一个数组,如果你想将其设置。如果匹配> = 1,您可能希望更改为{1,2}

0

你的正则表达式是正确的,它匹配正确。只要preg_match返回1就表示匹配,如果不匹配则返回0。请参阅documentation.

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中找到。