我有一个regexp来验证文件名。如下所示:
/[0-9a-zA-Z\^\&\'\@\{\}\[\]\,\$\=\!\-\#\(\)\.\%\+\~\_ ]+$/
它应该允许这样的文件名:
aaa aaa.ext a# A9#.ext
不允许使用以下字符\ / : * ? \" < > |问题是像*.txt或/\kk这样的文件名通过了验证。我正在用keyup事件进行验证。所以当我在不允许的字符后添加一个额外的字符时,它表明一切都是正确的。
\ / : * ? \" < > |
*.txt
/\kk
idv4meu81#
对于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');
r6l8ljro2#
您需要添加起始锚:
/^[0-9a-zA-Z ... ]+$/
这告诉引擎从输入的开始一直匹配到输入的结束,而对于原始表达式,它只需要匹配输入的结束。
k2fxgqgv3#
您需要使用^和$锚定表达式。例如:
^
$
/^[-\w^&'@{}[\],$=!#().%+~ ]+$/
注意,您需要在字符类中转义-,或者将其放在首位/末位。
-
daolsyd04#
/^(?!\.)(?!com[0-9]$)(?!con$)(?!lpt[0-9]$)(?!nul$)(?!prn$)[^\|\*\?\\:<>/$"]*[^\.\|\*\?\\:<>/$"]+$/ Must not be empty. Must not start with . Must not be com0-com9, con, lpt0-lpt9, nul, prn Must not contain | * ? \ : < > $ Must not end with .
7ivaypg95#
由于this post (regex-for-windows-file-name)重定向到这个问题,我假设它是关于windows文件名的。根据@Leon对@AndrewD的回答的评论和reference,我做了这个正则表达式,它对我很有效。
/^(con|prn|aux|nul|com[1-9]|lpt[1-9])$|([<>:"\/\\|?*])|(\.|\s)$/ig
根据命名约定(见上面的参考文献),我同意“com 0”应该是一个有效的文件名,但如果你试图在windows上命名一个文件“com 0”,它就不起作用了,所以我想这篇文章中没有提到。所以这个正则表达式会更安全
/^(con|prn|aux|nul|com[0-9]|lpt[0-9])$|([<>:"\/\\|?*])|(\.|\s)$/ig
zz2j4svz6#
我会尝试使用这个正则表达式(你甚至可以用它为ASP.NET MVC做一个验证属性!):
@"^[^\u0022\u003C\u003E\u007C\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u0009\u000A\u000B\u000C\u000D\u000E\u000F\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001F\u003A\u002A\u003F\u005C\u002F]*$"
如果它与输入匹配,则它是有效的文件名(至少在Windows上)。
odopli947#
试试这个:
^[0-9a-z_\-]{3,255}\.([a-z0-9]{2,5})$
它适用于任何文件名,最小3个字符,最大长度从255和扩展名从2到5个字符...文件名本身的字符允许数字,字符和减号和下划线...也许它有帮助。
7条答案
按热度按时间idv4meu81#
对于Windows名称。
r6l8ljro2#
您需要添加起始锚:
这告诉引擎从输入的开始一直匹配到输入的结束,而对于原始表达式,它只需要匹配输入的结束。
k2fxgqgv3#
您需要使用
^
和$
锚定表达式。例如:注意,您需要在字符类中转义
-
,或者将其放在首位/末位。daolsyd04#
7ivaypg95#
由于this post (regex-for-windows-file-name)重定向到这个问题,我假设它是关于windows文件名的。
根据@Leon对@AndrewD的回答的评论和reference,我做了这个正则表达式,它对我很有效。
根据命名约定(见上面的参考文献),我同意“com 0”应该是一个有效的文件名,但如果你试图在windows上命名一个文件“com 0”,它就不起作用了,所以我想这篇文章中没有提到。
所以这个正则表达式会更安全
zz2j4svz6#
我会尝试使用这个正则表达式(你甚至可以用它为ASP.NET MVC做一个验证属性!):
如果它与输入匹配,则它是有效的文件名(至少在Windows上)。
odopli947#
试试这个:
它适用于任何文件名,最小3个字符,最大长度从255和扩展名从2到5个字符...文件名本身的字符允许数字,字符和减号和下划线...也许它有帮助。