2011-09-28 82 views
1

我想要一个简单的通用$ _GET-vars验证器,并且不需要重新发明轮子。

是否有任何固体和简单的脚本,我可以使用,这样的:

function secure($varName,$format = 'int') { 
//format: boolean,int,dec,str,date 
    //add stripslashes if mq 
    $var = $_GET[$varName]; 
switch($format) { 
    case 'int': 
    $r = floor($var); 
    break; 
    case 'boolean': 
    $r = ($var === true); 
    break; 
    case 'dec': 
    $r = preg_replace("/0-9.-/i", "", $val); 
    break; 
    case 'str': 
    .. 
    case 'date': 
    //ISO 8601 is enough... 
} 

问候, //牛逼

+0

我不明白你的意思是“通用验证器”,PDO是如何发挥它的作用的?验证什么?你最终的目标是什么? –

+0

嗨,Pekka,抱歉不正确的标题,请重新加载。在FOSS中使用 – Teson

回答

5

filter_input()来相当接近你想做的事情。

它有相当数量的validationsanitation过滤器。

从手动被盗的一个例子:

<?php 
var_dump(filter_var('[email protected]', FILTER_VALIDATE_EMAIL)); 
var_dump(filter_var('http://example.com', FILTER_VALIDATE_URL, 
              FILTER_FLAG_PATH_REQUIRED)); 
?> 
+0

不知道它是否验证具有顶级域名的电子邮件,所以'bob @ example'不会返回false。 –

+0

大佩卡,好东西。虽然我错过了时间,日期和时间戳。 – Teson

+0

@Levi那么,这是*技术上*正确.... IMO,电子邮件地址验证无论如何 - 确保电子邮件地址存在的唯一方法是发送邮件给它,并等待收件人点击确认链接。 –

2

佩卡给予了极大的功能我不知道,但filter_input_array是你真正想要的东西。

http://www.php.net/manual/en/function.filter-input-array.php

实施例:

编辑:现在示出了如何验证一个DateTime(即,时间戳)。

/* data that came from GET 
$_GET = array(
    'id' => '14', 
    'name' => 'Guidoe' 
    'archived' => 'on', 
    'date' => '2006-12-12 10:00:00' 
); 
*/ 

$args = array(
    'id' => array('filter' => FILTER_VALIDATE_INT, 
          'options' => array('min_range' => 1, 'max_range' => 1000) 
          ), 
    'archived'  => array('filter' => FILTER_VALIDATE_BOOLEAN, 
          'flags'  => FILTER_NULL_ON_FAILURE 
          ), 
    'date' => array('filter' => FILTER_CALLBACK, 
        'options' => 'valid_date_time' 
          ) 
    'name' =>array('filter'=>FILTER_SANITIZE_STRING, 
        'flags'=>FILTER_FLAG_ENCODE_HIGH 
          ) 

); 

function valid_date_time($string) { 
    $parsed = date_parse($string); 
    if($parsed['error_count']>0 || $parsed['warning_count']>0) 
     return false; 

    return new DateTime($string); 
} 

$myinputs = filter_input_array(INPUT_GET, $args); 
+0

谢谢,但我相信var_filter更适合我的目的。 – Teson

+0

@user这是'filter_var()'的一个快捷方式,如果您想一次性清理所有GET变量,那么这非常理想。 –

+0

@Pekka它不是filter_var()的快捷方式,而是它定义的用于过滤整个INPUT数组的PHP方法。你不太正确,因为它不会清理所有变量,只有args中指定的变量。 –