用于验证文件名的Javascript正则表达式

用于验证文件名的Javascript正则表达式,javascript,regex,Javascript,Regex,我有一个regexp来验证文件名。这是: /[0-9a-zA-Z\^\&\'\@\{\}\[\]\,\$\=\!\-\#\(\)\.\%\+\~\_ ]+$/ 它应该允许这样的文件名: aaa aaa.ext a# A9#.ext 不允许使用以下字符\/:*\“| 问题是像*.txt或/\kk这样的文件名通过了验证。我正在使用keyup事件进行验证。因此,当我在不允许的字符后添加一个额外字符时,它表明一切都是正确的。您需要使用^和$来锚定表达式。例如: /^[-\w^&'@{

我有一个regexp来验证文件名。这是:

/[0-9a-zA-Z\^\&\'\@\{\}\[\]\,\$\=\!\-\#\(\)\.\%\+\~\_ ]+$/
它应该允许这样的文件名:

aaa
aaa.ext
a#
A9#.ext
不允许使用以下字符
\/:*\“<>|


问题是像
*.txt
/\kk
这样的文件名通过了验证。我正在使用keyup事件进行验证。因此,当我在不允许的字符后添加一个额外字符时,它表明一切都是正确的。

您需要使用
^
$
来锚定表达式。例如:

/^[-\w^&'@{}[\],$=!#().%+~ ]+$/

请注意,您需要在字符类中转义
-
,或者将其放在第一个/最后一个位置。

您需要添加起始锚点:

/^[0-9a-zA-Z ... ]+$/
这告诉引擎从输入的开始一直匹配到输入的结束,而对于原始表达式,它只需要在输入的结束处匹配。

对于Windows名称

var isValid=(function(){
  var rg1=/^[^\\/:\*\?"<>\|]+$/; // forbidden characters \ / : * ? " < > |
  var rg2=/^\./; // cannot start with dot (.)
  var rg3=/^(nul|prn|con|lpt[0-9]|com[0-9])(\.|$)/i; // forbidden file names
  return function isValid(fname){
    return rg1.test(fname)&&!rg2.test(fname)&&!rg3.test(fname);
  }
})();

isValid('file name');
var isValid=(函数(){
var rg1=//^[^\\\\\/:\*\?“\\\\;]+$//;//禁止字符\/:*?”<>|
变量rg2=//^\.//;//不能以点(.)开头
var rg3=/^(num | prn | con | lpt[0-9]| com[0-9])(\.|$)/i;//禁止的文件名
返回函数isValid(fname){
返回rg1.test(fname)和&!rg2.test(fname)和&!rg3.test(fname);
}
})();
isValid('文件名');
/^(?)(?!com[0-9]$)(?!con$)(?!lpt[0-9]$)(?!nul$)(?!prn$)[^\\\**\?\:/$”]*[^\.\\\*\?\:/$”]+$/
不能是空的。
不能从一开始。
不得为com0-com9、con、lpt0-lpt9、nul、prn
不得包含|*?\:<>$
不能以失败告终。

我想用这个正则表达式试试(你甚至可以用它为ASP.NET MVC创建一个验证属性!):

如果它与输入匹配,则它是有效的文件名(至少在Windows上)。

由于重定向到这个问题,我假定它是关于Windows文件名的

根据@Leon的评论和@AndrewD的回答,我做了这个正则表达式,它对我有用

/^(con|prn|aux|nul|com[1-9]|lpt[1-9])$|([<>:"\/\\|?*])|(\.|\s)$/ig
/^(con | prn | aux | nul | com[1-9]| lpt[1-9])$$$([:“\/\\\\\?*]))(\.\s)$/ig
根据命名约定(参见上面的参考资料),我同意“com0”应该是一个有效的文件名,但如果您试图在windows上将文件命名为“com0”,那么它将不起作用,因此我想这在本文中是不存在的

所以这个正则表达式会更安全

/^(con|prn|aux|nul|com[0-9]|lpt[0-9])$|([<>:"\/\\|?*])|(\.|\s)$/ig
/^(con | prn | aux | nul | com[0-9]| lpt[0-9])$$$([:“\/\\\\\?*]))(\.\s)$/ig

Escape/with\在rg1中。至少VS 2010是这样认为的。^(?)(?!com[0-9]$)(?!con$)(?!lpt[0-9]$)(?!nul$)(?!prn$)[^\\*\?\:/$”]*[^\.\\\\\**?\:/$”]+$感谢@RyanWilliams的评论。但我知道在Windows中创建文件的方法,文件名后面有点,但不带扩展名:应该返回!rg1.test&&&!rg2.test(fname)&&!rg3.test(fname);我猜.AUX缺失,COM0实际有效,以“.”开始,实际有效…/(正斜杠)缺失,AUX缺失,COM0实际有效,以“.”开始。“实际上是有效的……”。。。。接受的答案修复了您的正则表达式,但您的正则表达式在检查Windows文件名时不正确。缩写为:/^(con | prn | aux | nul |((com | lpt)[0-9])$)$([:“\/\ \ \?*])(\。\。\s)$/ig你能告诉我这个正则表达式是做什么的吗?
/^(con|prn|aux|nul|com[1-9]|lpt[1-9])$|([<>:"\/\\|?*])|(\.|\s)$/ig
/^(con|prn|aux|nul|com[0-9]|lpt[0-9])$|([<>:"\/\\|?*])|(\.|\s)$/ig