如何在字符串中preg_match一个单词?

问题描述 投票:-1回答:1

我试图为“.msi”和“.php”预先匹配文件的名称,但即使该文件具有该类型的文件类型,它也不会检测到它。

这是我的代码:

$uploaded_type = $_FILES['image']['name'];
    if (preg_match('#\b(msi|php)\b#', $uploaded_type,)) { 
    echo $uploaded_type; }

它不断通过,永远不会检测到它。我正在测试的文件名为“install.msi”感谢您的帮助。

php regex preg-match
1个回答
0
投票

如果你在php 7.3版本之前使用它,你现有的代码有一个额外的,拼写错误。 SEE HERE

<?php
$uploaded_type = 'install.msi';
if (preg_match('#\b(msi|php)\b#', $uploaded_type,)) { 
    echo $uploaded_type; 
}
?>

输出为7.3.0 - 7.3.3

install.msi

输出为7.1.25 - 7.2.16

解析错误:语法错误,意外')'在第3行进程退出代码255。

因此,当我删除尾随逗号,然后它完美地工作。 SEE

<?php
$uploaded_type = 'install.msi';
if (preg_match('#\b(msi|php)\b#', $uploaded_type)) { 
    echo $uploaded_type; 
}
?>

但我更喜欢使用pathinfo()in_array()的非正则表达方式,这将适用于大多数PHP版本。我们这样做 -

<?php
$uploaded_type = 'install.msi';
$info = pathinfo($uploaded_type);
$valid_file_extensions =  ['msi','php','jpg'] ;;
if (in_array($info["extension"],$valid_file_extensions)) {
  echo $uploaded_type;   
}
?>

但是:Kua zxsw指出

© www.soinside.com 2019 - 2024. All rights reserved.