2011-02-11 103 views
1

我想要一个模式来创建一个“is_id()”函数来验证mysql查询之前的用户输入。多数只包含数字的模式,我的问题是避免浮点数:正则表达式(避免浮点数)

function is_id($id) {   
    $pattern = "/^[0-9]+/";  
     if(preg_match($pattern,$id)) {  
      echo "ok";  
     } else {  
      echo "error";  
     }  
} 


is_id(0) // error 
is_id(-5) // error 
is_id(-5.5) // error 
is_id(1.5) // ok <-- THIS IS THE PROBLEM 
is_id(10) // ok 
is_id("5") // ok 
is_id("string") // error 
+1

你错过了一个$。 – BoltClock 2011-02-11 19:56:06

+0

这也是有效的,is_id(0)你有它显示//错误 – 2011-02-11 20:00:19

+0

当然有一个函数来确定一个值是否看起来像一个数字;应该没有必要为此构造一个正则表达式。 – Ether 2011-02-11 20:03:46

回答

4

您在模式中遗漏了尾随$。在is_id(1.5)您的模式匹配1并停止。如果添加尾部$(如^[0-9]+$),则该模式需要匹配整个输入才能成功。

6

$表示行/字符串匹配的结束。

/^[0-9]+$/ 
1

你不需要正则表达式这一点,你可以用一个简单的检查,像这样:

function is_id($id) 
{ 
    return ((is_numeric($id) || is_int($id)) && !is_float($id)) && $id > -1 
} 

输出如下:

var_dump(is_id(0));  // false - are we indexing from 0 or 1 ? 
var_dump(is_id(-5));  // false 
var_dump(is_id(-5.5));  // false 
var_dump(is_id(1.5));  // false 
var_dump(is_id(10));  // true 
var_dump(is_id("5"));  // true 
var_dump(is_id("string")); // false 

我喜欢ircmaxell的答案。

1

为什么使用正则表达式?为什么不签类型(这不是作为正则表达式为微小的,但它可能是更合适的语义)

function is_id($n) { 
    return is_numeric($n) && floor($n) == $n && $n > 0; 
} 

is_numeric()验证它要么浮子,一个int,或数比可以转换。

floor($n) == $n检查它是否确实是一个整数。

$n > 0检查,看它是否大于0

做...