验证输入中的过滤数字代码

时间:2014-06-07 07:21:15

标签: php arrays regex

我在课程中有特定的课程结构。我正在处理一些我无法在该程序中使用的漏洞。所以我创建了独立的代码,对我来说很好。

我编写了使用class过滤数字的代码。还有许多其他类似的过滤器。

在处理数字过滤时,我必须处理特定的漏洞。为此,我创造了代码。现在我想在课堂上写它。我做到了但却给出了错误。在重写代码时是否犯了错误?

以下是我想要实施的内容的演示:http://ideone.com/vxxDgG

我的实际程序看起来像这样:

class Phone extends Filter{ 
    function parse($text, $words){  
        $arrwords = array(0=>'zero',1=>'one',2=>'two',3=>'three',4=>'four',5=>'five',6=>'six',7=>'seven',8=>'eight',9=>'nine');
        preg_match_all('/[A-za-z]+/', $text, $matches);
        $arr=$matches[0];
        foreach($arr as $v){
            $v = strtolower($v);
            if(in_array($v,$arrwords)){
                $text= str_replace($v,array_search($v,$arrwords),$text);
            }
        }
        $resultSet = array();
        $l = strlen($text);
        foreach ($words as $word){
            $pattern = '/^(?:\((\+?\d+)?\)|(\+\d{0,3}))? ?\d{2,3}([-\.]?\d{2,3} ?){3,4}/';
            preg_match_all($pattern, $text, $matches, PREG_OFFSET_CAPTURE );
            $this->pushToResultSet($matches);
        }
        return $resultSet;
    }   
}

这是重写的代码,在ideone中演示的程序:

class Phone extends Filter{
    function parse($text, $words)
    {
        $arrwords = array_flip(array(0=>'zero',1=>'one',2=>'two',3=>'three',4=>'four',5=>'five',6=>'six',7=>'seven',8=>'eight',9=>'nine'));       
            $test= array();    
            foreach (explode(" ", $text) as $tocken)
            {
            $num = strtr(strtolower($tocken), $arrwords);
                if(is_numeric($num))
                    array_push($test,$tocken);
            }
        //print_r($test);
        $resultSet = array();
        $b = array();
        $pattern = '/^(?:\((\+?\d+)?\)|(\+\d{0,3}))? ?\d{2,3}([-\.]?\d{2,3} ?){3,4}/';
        foreach ($test as $value)
        {
            $value = strtolower($value);
            // Capture also the numbers so we just concat later, no more string substitution.
            $matches = preg_split('/(\d+)/', $value, 0, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
            if ($matches)
            {
                $newValue = array();
                foreach ($matches as $word)
                {
                    // Replace if a valid word number.
                    $newValue[] = (isset($arrwords[$word]) ? $arrwords[$word] : $word);
                }
                $newValue = implode($newValue);            
                if (preg_match($pattern, $newValue))
                {
                        $b[] = $value;  
                    $this->pushToResultSet($b);
                }
            }
        }       
        //print_r($b);
        return $resultSet;
    }   
}

此代码是否包含任何逻辑错误。像推数组值错误?

以上重写代码会出错。因为代码不是直接执行的。它是从另一个文件调用的。因此无法看到准确的错误行。

如果有人可以帮助我,我感激不尽。

0 个答案:

没有答案