2010-09-24 4 views
1

Есть ли способ проверить, введен ли пользователь только 4 числа, а не 4 буквы с использованием PHP? Если да, то как?PHP Validation Question

ответ

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

+1 для сильно недоиспользуемых функций 'ctype'! :) – deceze

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

Hex обозначение и научная нотация 'are_numeric' также! Кроме того, что это за 'ctype' не работает и пользовательский ввод? Это чепуха. – deceze

+1

Конечно, ctype_digit будет работать. Из документации: «Проверяет, являются ли все символы в предоставленной строке, текстом, числовыми». Это именно то, что хочет сделать здесь. – ChrisM

+0

Извините, мой плохой. На самом деле это наоборот. 'ctype_digit' не работает с целыми числами, которые вызывают проблемы, если вы правильно приписываете свои значения. – Xeoncross

1

Filters может быть допустимой альтернативой, хотя и несколько подробным. Они позволяют вам правильно выражать свои правила валидации, такие как правила:

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