2011-02-02 30 views
5

我最近發現我用來驗證用戶輸入的方法接受了一些我並不特別滿意的值。我需要它只接受沒有非數字字符的自然數(1,2,3等)。正則表達式只驗證自然數?

我的方法是這樣的:

function is_natural($str) 
{ 
    return preg_match('/[^0-9]+$/', $str) ? false : $str; 
} 

所以它應該如果發現任何東西,但整體自然數返回false。問題是,它接受字符串像"2.3"甚至"2.3,2.2"

+4

你是什麼意思「的自然數,但沒有數字」?你想不用[數字]的數字(http://en.wikipedia.org/wiki/Numerical_digit)? – 2011-02-02 18:20:01

+0

該正則表達式不匹配一個點或逗號。 – Koraktor 2011-02-02 18:28:01

+0

我用`filter_var`: http://stackoverflow.com/a/6563394/2165415 看到帖子出現的 – 2014-03-01 07:49:27

回答

14

也許你可以澄清一個「數字」和「數字」之間的區別?

不管怎麼說,你可以使用

if (preg_match('/^[0-9]+$/', $str)) { 
    // contains only 0-9 
} else { 
    // contains other stuff 
} 

,或者您可以使用

$str = (string) $str; 
ctype_digit($str); 
14

/^[0-9]+$/的問題是,它也可以接受像0123值。 正確的正則表達式是/^[1-9][0-9]*$/

ctype_digit()也有同樣的問題。

如果您還需要包括零使用這個表達式來代替:/^(?:0|[1-9][0-9]*)$/