[英]Regular Expression (avoid float numbers)
我想要一个模式来创建“ 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
$表示要匹配的行/字符串的结尾。
/^[0-9]+$/
您在模式中缺少尾随的$
。 在is_id(1.5)
您的模式与1
匹配并停止。 如果添加尾随$
(如^[0-9]+$
),则该模式需要匹配整个输入才能成功。
您不需要正则表达式,可以使用如下所示的简单检查:
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的回答。
为什么要使用正则表达式? 为什么不检查类型(它不如正则表达式那么小,但在语义上可能更合适)
function is_id($n) {
return is_numeric($n) && floor($n) == $n && $n > 0;
}
is_numeric()
验证它是浮点数,整数还是可以转换的数字。
floor($n) == $n
检查是否确实是整数。
$n > 0
检查它是否大于0。
完成...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.