PHP:在数组元素中搜索精确的字符串模式

时间:2013-10-30 03:54:40

标签: php regex foreach

我想通过PHP验证我网站上传的所有文件。我正在使用正则表达式来比较文件内容,但它似乎并没有像我期望的那样工作。我想接受每行只有1个字词的文件。

EXPECTED INPUT:
HP34930
HP09099
HP98899

UNACCEPTABLE INPUT:
HP89980 HP98798 HP09232
some other text
HP58089

这是我的代码:

$texthandle = file($_FILES["textfile"]["tmp_name"]);
foreach ($texthandle as $textline)
{
    if (!preg_match("/(HP\d+){1}/", $textline))
    {
    echo "Incorrect file format. Please provide a text file with 1 term per line.";
            exit(0);
    }       
}

有人可以建议为什么这不能检测我想要的方式吗?

我也试过

if (!preg_match("/^(HP\d+){1}$/", $textline))

但是我没想到它会起作用。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

不确定什么不起作用,但请尝试:

$texthandle = file($_FILES["textfile"]["tmp_name"], FILE_IGNORE_NEW_LINES);

然后:

if (!preg_match("/^HP\d+$/", $textline))

或者如果只允许5位数字:

if (!preg_match("/^HP[\d]{5}$/", $textline))

如果末尾有任何空格,如空格,制表符等,则会失败,因此您可以在$ textline上尝试trim()。