Php 使用Regexp确定数据类型

Php 使用Regexp确定数据类型,php,sql,regex,Php,Sql,Regex,我有一根绳子。我应该生成一个sql文本。我可以使用regexp确定数据类型吗。 例如:2013年4月15日或2013年4月15日或2013年4月15日为日期。 15,46是整数/int 1或0是布尔值。。。等等。这里有一个简单而愚蠢的检查器。。。但我必须指出,您不能确定日期和月份…(对于

我有一根绳子。我应该生成一个sql文本。我可以使用regexp确定数据类型吗。 例如:2013年4月15日或2013年4月15日或2013年4月15日为日期。 15,46是整数/int
1或0是布尔值。。。等等。

这里有一个简单而愚蠢的检查器。。。但我必须指出,您不能确定日期和月份…(对于<13天的天数)

在这里,您必须为
$a
的每个成员填写支票

$a[0]
$a[1]
$a[2]
都应该包含日期元素,所以您可以检查它们

注意,这个月可能是一个像“尼桑”、“五月”、“哈兹兰”这样的文字

如果它们是有效的返回:

 return('date');
使用and,以下函数检查它是布尔值、整数、浮点值还是日期:

function get_type($input){
    $type = gettype($input);
    if($type == 'string'){
        if(filter_var($input, FILTER_VALIDATE_INT) !== false){
            return 'integer';
        }elseif(filter_var($input, FILTER_VALIDATE_FLOAT) !== false){
            return 'float';
        }elseif(filter_var($input, FILTER_VALIDATE_BOOLEAN) !== false){
            return 'boolean';
        }elseif(strtotime($input) !== false){
            return 'date';
        }
    }elseif($type == 'double'){
        return 'float';
    }
    return $type;
}
输入:

echo '0 : <b>'.get_type(0).'</b><br>';
echo '1 : <b>'.get_type(1).'</b><br>';
echo '1.11 : <b>'.get_type(1.11).'</b><br>';
echo '1.2e3 : <b>'.get_type(1.2e3).'</b><br>';
echo 'true : <b>'.get_type(true).'</b><br>';
echo 'false : <b>'.get_type(false).'</b><br>';
echo '\'wut\' : <b>'.get_type('wut').'</b><br>';
echo 'array() : <b>'.get_type(array()).'</b><br>';
echo '\'TRUE\' : <b>'.get_type('TRUE').'</b><br>';
echo '\'false\' : <b>'.get_type('TRUE').'</b><br>';
echo '\'0\' : <b>'.get_type('0').'</b><br>';
echo '\'1\' : <b>'.get_type('1').'</b><br>';
echo '\'15.04.2013\' : <b>'.get_type('15.04.2013').'</b><br>';
echo '\'15 april 2013\' : <b>'.get_type('15 april 2013').'</b><br>';
echo '\'+7 days\' : <b>'.get_type('+7 days').'</b><br>'; // fail in a way
echo '\'15/04/2013\' : <b>'.get_type('15/04/2013').'</b><br>'; // fail
echo '\'25-10-2013 wut\' : <b>'.get_type('25-10-2013 wut').'</b><br>';
echo '\'500\' : <b>'.get_type('500').'</b><br>';
echo '\'54.360\' : <b>'.get_type('54.360').'</b><br>';
echo '\'+54.360\' : <b>'.get_type('+54.360').'</b><br>';
echo '\'1.2e3\' : <b>'.get_type('1.2e3').'</b><br>';
echo '\'7E-10\' : <b>'.get_type('7E-10').'</b><br>';
0 : integer
1 : integer
1.11 : float
1.2e3 : float
true : boolean
false : boolean
'wut' : string
array() : array
'TRUE' : boolean
'false' : boolean
'0' : integer
'1' : integer
'15.04.2013' : date
'15 april 2013' : date
'+7 days' : date
'15/04/2013' : string
'25-10-2013 wut' : string
'500' : integer
'54.360' : float
'+54.360' : float
'1.2e3' : float
'7E-10' : float

为什么要使用正则表达式?适用于布尔、整型、字符串、对象、数组等。。。然后,如果是字符串,您可以继续检查日期/其他您想要的自定义格式。因为数据是“15.04.2013”,如果使用gettype,它将始终返回“字符串”。不仅使用日期数据。文本中有浮点、整数和当前格式。
1
0
不是布尔值
true
false
是布尔值,但将
1
0
强制转换为布尔值将返回预期结果
0 : integer
1 : integer
1.11 : float
1.2e3 : float
true : boolean
false : boolean
'wut' : string
array() : array
'TRUE' : boolean
'false' : boolean
'0' : integer
'1' : integer
'15.04.2013' : date
'15 april 2013' : date
'+7 days' : date
'15/04/2013' : string
'25-10-2013 wut' : string
'500' : integer
'54.360' : float
'+54.360' : float
'1.2e3' : float
'7E-10' : float