我在课程中有特定的课程结构。我正在处理一些我无法在该程序中使用的漏洞。所以我创建了独立的代码,对我来说很好。
我编写了使用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;
}
}
此代码是否包含任何逻辑错误。像推数组值错误?
以上重写代码会出错。因为代码不是直接执行的。它是从另一个文件调用的。因此无法看到准确的错误行。
如果有人可以帮助我,我感激不尽。