使用Regex确定数据类型

时间:2013-04-15 13:19:48

标签: php sql regex

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

2 个答案:

答案 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');