if语句在应用match()方法时无法找到字符串

时间:2012-12-27 10:40:41

标签: javascript regex

需要执行简单的操作。如果fileExt不是.jpg .jpeg .png .pdf,则应显示警告。

var fileName = 'upload-success.png';
var fileExt = fileName.match(/\.[a-z]{3,4}$/i); // fails
// var fileExt = '.png'; // works

if (fileExt !== ".jpg" && fileExt !== ".jpeg" && fileExt !== ".png" && fileExt !== ".pdf") {
    alert('Incorrect Extension: '+fileExt);
}

在两种情况下设置fileExt结果都是一样的。 但是在使用match-if语句的情况下找不到字符串。

http://jsfiddle.net/mCjSW/1/

2 个答案:

答案 0 :(得分:1)

.match()返回一个数组,因此您必须使用:

var fileExt = fileName.match(/\.[a-z]{3,4}$/i)[0];

<强> MDN docs

答案 1 :(得分:1)

如何直接使用match()检查文件扩展名?

var f = 'foo.png';

if (!f.match(/\.(jpe?g|png|pdf)$/))
    alert('invalid extension');

由于我们不需要match()返回的数组,我们可以在这里使用test()

if (!/\.(jpe?g|png|pdf)$/.test(f))
    alert('invalid extension');

请记住,查看文件的扩展名并不能确保其内容与扩展名的文件类型相匹配;但是,过滤扩展程序可确保用户不会意外选择/上传错误的文件。查看文件的MIME类型绝对是可取的,但是这样的检查必须在服务器端完成(当然有很多方法可以绕过用javascript完成的检查,最明显的是在浏览器中停用javascript支持)。