2010-09-24 60 views
1

有沒有一種方法可以檢查用戶是否只使用PHP輸入4個數字而不是4個字母?如果是這樣如何?PHP驗證問題

回答

4
if (strlen($s) == 4 && ctype_digit($s)) { 
    // ... 
} 
+1

+1對於大量未被使用的'ctype'函數! :) – deceze 2010-09-24 02:55:15

2

或者你也可以這樣做:

if(preg_match('/^\d{4}$/',$input)) { 
// valid input 
} else { 
// invalid input. 
} 
2

ctype_digit將無法工作已經類型強制轉換爲整數/浮點型的用戶輸入。正則表達式很慢 - 所以只有在需要時才使用它。因此,考慮到這一點我會做類似

$s = (string) $_POST['value']; 
if(strlen($s) === 4 AND ctype_digit($s)) 
{ 
    // Now that it's verified as a good value 
    // convert to int for the rest of the script 
    $value = (int) $s; 
} 

這也將保護您免受傳遞數組到您的字符串檢查的用戶。

+2

十六進制符號和科學記數法'are_numeric'以及!另外,這是關於'ctype'不工作和用戶輸入?這是無稽之談。 – deceze 2010-09-24 02:54:46

+1

當然ctype_digit將工作。從文檔中:「檢查提供的字符串中的所有字符是否都是數字。」這正是提問者想要在這裏做的。 – ChrisM 2010-09-24 12:18:33

+0

對不起,我的壞。實際上是相反的。 'ctype_digit'不能在整數上工作,如果你正確地構造了你的值,就會導致問題。 – Xeoncross 2010-09-24 14:51:54

1

Filters可能是一個有效的選擇,儘管有些冗長。它們允許你像規則一樣表達你的驗證規則,這是很好的:

$isValid = filter_input(
    INPUT_POST, 
    'varname', 
    FILTER_VALIDATE_INT, 
    array('options' => array('min_range' => 1000, 'max_range' => 9999)) 
);