【发布时间】:2015-12-26 09:36:09
【问题描述】:
我有一些 PHP 代码接受来自 HTML 表单的上传文件,然后使用正则表达式读取它以查找特定行(在下面的例子中,那些带有“数字”后跟整数的行)。
正则表达式匹配我想要的整数,但当然它们在 $matches 中作为字符串返回。我需要检查整数是否在 0 到 9 之间,但无论我尝试什么,我都无法做到这一点。
使用 intval() 或 (int) 首先将匹配项转换为整数总是返回 0,即使给定的字符串只包含整数。并且由于某种原因,使用 in_array 将整数与 0-9 作为字符串的数组进行比较总是返回 false 。这是故障码...
$myFile = file($myFileTmp, FILE_IGNORE_NEW_LINES);
$numLines = count($myFile) - 1;
$matches = array();
$nums = array('0','1','2','3','4','5','6','7','8','9');
for ($i=0; $i < $numLines; $i++) {
$line = trim($myFile[$i]);
$numberMatch = preg_match('/Number(.*)/', $line, $matches);
if ($numberMatch == 1 and ctype_space($matches[1]) == False) { // works up to here
$number = trim($matches[1]); // string containing an integer only
echo(intval($number)); // conversion doesn't work - returns 0 regardless
if (in_array($number,$nums)) { // searching in array doesn't work - returns FALSE regardless
$number = "0" . $number;
}
}
}
我已经尝试过类型检查、双引号、单引号、修剪空格、UTF8 编码……还有什么可能?我要彻底放弃这个应用了,请救救我。
【问题讨论】:
-
您的示例代码不完整,因为不可重现。输入数据(您所说的是文件)丢失。现在,我不想说您应该在此处发布您的文件,但您需要提供一个示例,其中包含显示您的问题所需的尽可能少的代码和数据。实现这一点的一个好方法是从头开始创建一个新示例,并使用尽可能少的代码来显示您的问题。这不仅是您更好地理解自己的代码的好方法(而且通常它已经为您提供了答案),而且由于它更具体,它还创造了一个更好的问题。