我有一个字符串。我应该生成一个sql文本。我可以使用regexp确定数据类型。 例如:2013年4月15日或2013年4月15日或2013年4月15日是日期。 15,46是整数/ int 1或0是布尔...等等。
答案 0 :(得分:2)
使用gettype()和strtotime(),以下函数检查它是否为布尔值,整数,浮点数或日期:
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
答案 1 :(得分:1)
这是一个简单而愚蠢的检查员...但我必须提到你不能确定日期和月份......(天数&lt; 13)......
$s = '01/04/2013';
if (($s=='0') || ($s=='1') || ($s=='true') || ($s=='false')) return('boolean');
if ((string)intval($s) == $s) return('integer');
if (intval($s).'TL' == $s) return('currency');
if ((string)parseFloat($s) == $s) return('float');
$a = explode('.', $s);
if (count($a) != 3) $a = explode('/', $s);
if (count($a) != 3) return('I do not know');
在这里,你必须填写$a
...
$a[0]
,$a[1]
和$a[2]
应该包含日期元素,因此请检查它们......
要注意,月份可能是“Nisan”,“Mayıs”,“Haziran”等文本
如果他们是有效的回报:
return('date');