簡體   English   中英

正則表達式(避免浮點數)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM