2010-09-24 61 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)) 
);