2010-04-08 110 views
1

如何檢查並查看用戶是否只輸入數字,並且使用PHP至少有4個數字?PHP驗證問題

+1

請先嚐試編寫代碼; http://www.php.net是一個很好的參考。 – 2010-04-08 20:50:24

+2

@TaG,這似乎有點不受歡迎。 – 2010-04-08 20:56:39

+0

RTFQ人!由於某種原因,對這個問題的回答很多。 – notJim 2010-04-08 20:57:21

回答

5

你可以使用正則表達式:

/^\d{4,}$/ 

用法示例:

$s = "7325"; 
if (preg_match('/^\d{4,}$/', $s)) { 
    echo "matches"; 
} 
+2

你可以使用'preg_match()'檢查你可以使用' – 2010-04-08 20:52:13

+0

@Alexandre Jasmin,謝謝:) – TaG 2010-04-08 20:53:52

+0

@Alexandre:好點 - 我已經添加了一些示例代碼。 – 2010-04-08 20:55:46

0

你有任何示例代碼開始嗎?

要嚴格回答你的問題,你可以使用像if(preg_match('/^\d{4,}$/', $input)...這樣的正則表達式。

但是這裏還有很多需要考慮的事情:您需要考慮驗證和過濾(並且最好保留兩個單獨的問題)。如果你嚴格檢查一個整數,那麼我認爲你可以安全地使用SQL注入,XSS等,但是你真的需要處理這些問題,因爲遲早你需要過濾&驗證除簡單整數以外的其他內容。

+0

intval('0000')爲0,即使它是四位數字,並且長度爲4或更大,它將對您無效。 – notJim 2010-04-08 20:56:51

6

馬克·拜爾斯的建議是很好的,但這裏的另一種方式:

$valid = ctype_digit($number) && strlen($number) >= 4; 
+1

我喜歡這個,因爲(如Mark的)'0123'符合條件,並且不使用正則表達式引擎。 – webbiedave 2010-04-08 20:58:11

+0

@notJim,你贏得了我的投票,因爲你的最高性能:) – 2010-04-08 21:12:46

1

ctype_digit()& &的strlen()獲得

<?php 

function benchmark($callback){ 
    echo sprintf('%-30s: ', $callback); 
    $t = microtime(true); 
    foreach(range(1, 10000) as $n){ 
    call_user_func($callback); 
    } 
    echo (microtime(true)-$t)."\n"; 
} 

function mark_byers_preg_match(){ 
    $s = "7325"; 
    preg_match('/^\d{4,}$/', $s); 
} 

function notjim_ctype_digit_strlen(){ 
    $number = 7325; 
    ctype_digit($number) && strlen($number) >= 4; 
} 

function tomalak_intval_broken(){ 
    $check = 7325; 
    intval($check) == $check && $check >= 1000 && $check <= 9999; 
} 

benchmark('mark_byers_preg_match'); 
benchmark('notjim_ctype_digit_strlen'); 
benchmark('tomalak_intval_broken'); 

?> 

結果

mark_byers_preg_match   : 0.029040098190308 
notjim_ctype_digit_strlen  : 0.026585817337036 
tomalak_intval_broken   : 0.019872903823853 

注意: @ Tomalak's沒有與開始0數字將不起作用,因此不符合


編輯: @除去kiethjgrant的解決方案,因爲intval(0000)評估爲false當它應該是true

+0

與數字這附近,沒有贏家。另外,由於OP說,這是用戶輸入,所有輸入將是字符串。 – Gordon 2010-04-08 21:14:17

+0

我很欣賞這種努力,但這是所有毫無意義,過早微觀優化的母親。 – notJim 2010-04-08 21:21:27

+0

@notJim,「所有毫無意義的母親」和「不成熟」都是沒有意義的。有時結果會有很大的不同,只需要大約2分鐘的時間將解決方案複製/粘貼到腳本中。有什麼危害? – 2010-04-08 21:55:51

0

你應該總是用最有效的方式做到這一點

if (is_numeric($imput) && isset($input[3])) 
{ 
    // your code 
} 

isset()函數是一個語言結構,它總是快於strlen的()。 ($ input [n-1])告訴你string(通過form的數據總是字符串)是否至少有n個long。

is_numeric()檢查它是一個有效的數字字符串。

我認爲它比ctype_digit()更好& & strlen()。

+0

is_numeric驗證更多,然後只是數字。 – OIS 2010-04-08 23:28:31