2014-02-18 50 views
1

我正在使用以下JavaScript来检查文件名是否仅包含字母,数字,破折号和下划线。正则表达式在IE和Chrome中总是返回false

var patt = /^[a-zA-Z0-9._-]+$/; 
if (!patt.test(filename)) { 
    alert("Filename contains invalid characters"); 
} 

Firefox的正常工作,包含空格的文件名被拒绝,并允许其他人,但在IE和Chrome,它总是返回FALSE,无论文件名被传递给它。

我也使用RexgExp对象的尝试:

var patt = new RegExp(/^[a-zA-Z0-9._-]+$/); 

,但结果是一样的。

+0

为什么这个点在方括号内? – 11684

+0

如果你想扩展名(即.jpg),你需要使用“\”。不是“。” 。是正则表达式的通配符,匹配所有字符(包括空格) 修改后的正则表达式:^ [a-zA-Z0-9 \ ._-] + $ 如果你也考虑@EvertonAgner的帖子,正则表达式是 ^ [a-zA-Z0-9 \ ._-] * $ –

+2

我必须问...您确定您传递的文件名不是空字符串(在Chrome和IE上)?我的意思是,'+'修饰符要求至少应有1个字符。 – everton

回答

0

感谢@EvertonAgner的提示,我检查了正在传递的文件名,Chrome和IE正在为它添加“C:\ fakepath \”。所以我需要在检查之前剥掉它。

这是一个现在看来是工作代码:

var filename = filename.split("\\").pop(); 
var patt = /^[a-zA-Z0-9._-]+$/; 
if (!patt.test(filename)) { 
    alert("Filename contains invalid characters"); 
} 
+0

然后,我会将它作为答案发布。很高兴它解决了! :) – everton

0

鉴于你的正则表达式,我要检查,如果你正在测试的filename不是一个空字符串。

由于您的正则表达式使用+修饰符,它要求您的输入必须至少有一个字符。

相关问题