【问题标题】:PHP code works but not inside a functionPHP 代码有效但不在函数内部
【发布时间】:2014-07-17 19:29:40
【问题描述】:

我使用 text2re.com 生成了匹配 15 位 IMEI 号码的代码。 代码运行良好,但插入函数时无法正常工作。

函数PHP

<?php
function matchIMEI($str)
{
  $re1='.*?';   # Non-greedy match on filler
  $re2='\\d';   # Uninteresting: d
  $re3='.*?';   # Non-greedy match on filler
  $re4='\\d';   # Uninteresting: d
  $re5='.*?';   # Non-greedy match on filler
  $re6='\\d';   # Uninteresting: d
  $re7='.*?';   # Non-greedy match on filler
  $re8='\\d';   # Uninteresting: d
  $re9='.*?';   # Non-greedy match on filler
  $re10='\\d';  # Uninteresting: d
  $re11='.*?';  # Non-greedy match on filler
  $re12='\\d';  # Uninteresting: d
  $re13='.*?';  # Non-greedy match on filler
  $re14='\\d';  # Uninteresting: d
  $re15='.*?';  # Non-greedy match on filler
  $re16='\\d';  # Uninteresting: d
  $re17='.*?';  # Non-greedy match on filler
  $re18='(\\d)';    # Any Single Digit 1
  $re19='(\\d)';    # Any Single Digit 2
  $re20='(\\d)';    # Any Single Digit 3
  $re21='(\\d)';    # Any Single Digit 4
  $re22='(\\d)';    # Any Single Digit 5
  $re23='(\\d)';    # Any Single Digit 6
  $re24='(\\d)';    # Any Single Digit 7
  $re25='(\\d)';    # Any Single Digit 8
  $re26='(\\d)';    # Any Single Digit 9
  $re27='(\\d)';    # Any Single Digit 10
  $re28='(\\d)';    # Any Single Digit 11
  $re29='(\\d)';    # Any Single Digit 12
  $re30='(\\d)';    # Any Single Digit 13
  $re31='(\\d)';    # Any Single Digit 14
  $re32='(\\d)';    # Any Single Digit 15

  if ($c=preg_match_all ("/".$re1.$re2.$re3.$re4.$re5.$re6.$re7.$re8.$re9.$re10.$re11.$re12.$re13.$re14.
                         $re15.$re16.$re17.$re18.$re19.$re20.$re21.$re22.$re23.$re24.$re25.$re26.$re27.
                         $re28.$re29.$re30.$re31.$re32."/is", $str, $matches))
  {
      $d1=$matches[1][0];
      $d2=$matches[2][0];
      $d3=$matches[3][0];
      $d4=$matches[4][0];
      $d5=$matches[5][0];
      $d6=$matches[6][0];
      $d7=$matches[7][0];
      $d8=$matches[8][0];
      $d9=$matches[9][0];
      $d10=$matches[10][0];
      $d11=$matches[11][0];
      $d12=$matches[12][0];
      $d13=$matches[13][0];
      $d14=$matches[14][0];
      $d15=$matches[15][0];
      return "$d1$d2$d3$d4$d5$d6$d7$d8$d9$d10$d11$d12$d13$d14$d15";
  }

}


?>

以及调用函数的代码:

include function.php    
$txt='2014-07-17 IMEI: 016666001643648 USA MODEL';
    $test = matchIMEI($txt);
    echo $test;

对 PHP 相当陌生。有什么问题?

【问题讨论】:

  • var_dump($test); - 这会返回 FALSE,还是?
  • 怎么不工作了?你期望得到什么,结果是什么。而且它不是 HTML,而是 PHP 代码
  • 刚刚运行它here,输出016666001643648。有什么问题?
  • 可以确认@BenedictLewis 的评论。
  • 为什么不用echo $d1$d2$d3$d4$d5$d6$d7$d8$d9$d10$d11$d12$d13$d14$d15";结尾而不是返回呢?

标签: php function


【解决方案1】:

您想为您创建的 IMEI 函数使用 PHP 包含函数:

index.php:

<?php
include 'imei_func.php';

$txt='2014-07-17 IMEI: 016666001643648 USA MODEL';
$test = matchIMEI($txt);
echo $test;

?>

imei_func.php

<?php

function matchIMEI($str)
{
  $re1='.*?';       # Non-greedy match on filler
  $re2='\\d';       # Uninteresting: d
  $re3='.*?';       # Non-greedy match on filler
  $re4='\\d';       # Uninteresting: d
  $re5='.*?';       # Non-greedy match on filler
  $re6='\\d';       # Uninteresting: d
  $re7='.*?';       # Non-greedy match on filler
  $re8='\\d';       # Uninteresting: d
  $re9='.*?';       # Non-greedy match on filler
  $re10='\\d';      # Uninteresting: d
  $re11='.*?';      # Non-greedy match on filler
  $re12='\\d';      # Uninteresting: d
  $re13='.*?';      # Non-greedy match on filler
  $re14='\\d';      # Uninteresting: d
  $re15='.*?';      # Non-greedy match on filler
  $re16='\\d';      # Uninteresting: d
  $re17='.*?';      # Non-greedy match on filler
  $re18='(\\d)';    # Any Single Digit 1
  $re19='(\\d)';    # Any Single Digit 2
  $re20='(\\d)';    # Any Single Digit 3
  $re21='(\\d)';    # Any Single Digit 4
  $re22='(\\d)';    # Any Single Digit 5
  $re23='(\\d)';    # Any Single Digit 6
  $re24='(\\d)';    # Any Single Digit 7
  $re25='(\\d)';    # Any Single Digit 8
  $re26='(\\d)';    # Any Single Digit 9
  $re27='(\\d)';    # Any Single Digit 10
  $re28='(\\d)';    # Any Single Digit 11
  $re29='(\\d)';    # Any Single Digit 12
  $re30='(\\d)';    # Any Single Digit 13
  $re31='(\\d)';    # Any Single Digit 14
  $re32='(\\d)';    # Any Single Digit 15

  if ($c=preg_match_all ("/".$re1.$re2.$re3.$re4.$re5.$re6.$re7.$re8.$re9.$re10.$re11.$re12.$re13.$re14.$re15.$re16.$re17.$re18.$re19.$re20.$re21.$re22.$re23.$re24.$re25.$re26.$re27.$re28.$re29.$re30.$re31.$re32."/is", $str, $matches))
  {
    $d1=$matches[1][0];
    $d2=$matches[2][0];
    $d3=$matches[3][0];
    $d4=$matches[4][0];
    $d5=$matches[5][0];
    $d6=$matches[6][0];
    $d7=$matches[7][0];
    $d8=$matches[8][0];
    $d9=$matches[9][0];
    $d10=$matches[10][0];
    $d11=$matches[11][0];
    $d12=$matches[12][0];
    $d13=$matches[13][0];
    $d14=$matches[14][0];
    $d15=$matches[15][0];
    return "$d1$d2$d3$d4$d5$d6$d7$d8$d9$d10$d11$d12$d13$d14$d15";
  }
}
?>

【讨论】:

  • 这对你有用吗?我无法让它继续工作。
  • 是的,它有效。请通过设置error_reportin(E-ALL) 进行调试,并确保包含正确的文件。
【解决方案2】:

我认为这将是获得正确的快捷方式 字符串。

$txt='2014-07-17 IMEI: 016666001643648 USA MODEL';
list ($a,$b) =explode(':',$txt);
echo substr($b, 0, 16);

希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-14
    • 2020-08-24
    • 2020-05-04
    • 1970-01-01
    相关资源
    最近更新 更多