Javascript 匹配字符的最后一个实例(如果存在)以验证扩展名为regex的文件名

Javascript 匹配字符的最后一个实例(如果存在)以验证扩展名为regex的文件名,javascript,regex,internet-explorer,firefox,google-chrome,Javascript,Regex,Internet Explorer,Firefox,Google Chrome,我试图使用Asp.net 2.0 Webforms中的正则表达式验证程序限制用户上载长名称文件和不可接受的文件扩展名。我希望文件名包含30个字符[受Db设计限制],扩展名匹配png、jpeg、zip、rar、7z。我提出了这个正则表达式,它确保文件名是有效字符,然后是文字周期,然后是扩展名 ^[\w\uz]{3,28}\(pdf | jpeg | png)$ 更新: 我提出了这个正则表达式,它只匹配最后一个实例,即使长文件名也会得到验证 (\\(?!.*\\)|)[\w_]{3,30}\.(pd

我试图使用Asp.net 2.0 Webforms中的正则表达式验证程序限制用户上载
长名称文件
不可接受的文件扩展名
。我希望
文件名包含30个
字符[受Db设计限制],扩展名匹配
png、jpeg、zip、rar、7z
。我提出了这个正则表达式,它确保文件名是有效字符,然后是
文字周期,然后是扩展名

^[\w\uz]{3,28}\(pdf | jpeg | png)$

更新: 我提出了这个正则表达式,它只匹配最后一个实例,即使长文件名也会得到验证

(\\(?!.*\\)|)[\w_]{3,30}\.(pdf|jpeg|jpg|pdf)$
更新:即使这样,文件名也不限于30个字符

[\w]{3,30}\.(pdf|jpeg|jpg|pdf)(?=)
信息:它甚至验证了
c:\fakePath\stackoverflowstackoverflowstackoverflowstackoverflow
顺便说一句,它突出显示了文件名中的最后30个字符

问题是,我希望在上传时在客户端上进行验证,因此
EnableClientScript=True
,但令我惊讶的是,控件验证的fileUpload.value在大多数浏览器中完全不同

Firefox报告:预期的filename.extension

Internet Explorer报告了文件的完整路径

chrome报告C:\fakePath\fileName.extension

现在我该如何为它编写一个表达式,我的想法是查找
\
字符的最后一个实例(如果值中存在),然后从那里开始。但我对正则表达式的了解完全局限于基础知识。有人能纠正我并提供一个有效的正则表达式吗

注意: 在提供之前,请确保它符合我的要求,可以跨浏览器工作并在客户端进行验证。

我建议:

\b\w{3,30}\.(?:pdf|jpe?g|png|7z|zip|rar)$

这匹配从Word边界开始的文件名(没有<代码> \b/COD> >它可能在过长的文件名中间开始匹配)。文件名中只允许使用ASCII字母、数字和下划线(无重音字符!),也禁止使用点

请记住使用正则表达式文字表示法构造正则表达式:

var myregexp = /\b\w{3,30}\.(?:pdf|jpe?g|png|7z|zip|rar)$/;

\w
包含下划线(
)。@Tim不会在chrome上验证值
c:\fakePath\hgshdgdgdhfgdshgfhdsgfhdsgfhsgf.pdf
,即使在Ie i上也是如此suppose@Deeptechtons当前位置不应该,是吗?超过30个字符。你是如何构造正则表达式的?使用字符串或regex对象?@Tim,即使值是
c:\fakePath\hgshdgddhfgdshgfhdsgfhdsgfhdsgfhfhsgf.pdf
我希望regex检查
的最后一个实例,因此在上面它会检查
hgshdgddhfgdshgfsgfhdsgj.pdf`这是30个字符,我像下面那样测试它
“c:\fakepath\hgshdgdgdshgfhdsgfhdsggj.pdf.match(/\b\w{3,30}\(?:pdf | jpe?g | png | 7z | zip | rar)$/)
@我在浏览器上测试了正则表达式,它可以跨浏览器工作。在javascript中测试、字符串匹配和正则表达式对象之间有根本区别吗?在字符串中,通常需要避开反斜杠(不仅仅是在正则表达式中;您似乎忘记了在您的示例中-
C:\fakepath
被解释为
C:
,formfeed,
akepath
)。