我有一个regexp来验证文件名.就这个:
/[0-9a-zA-Z\^\&\'\@\{\}\[\]\,\$\=\!\-\#\(\)\.\%\+\~\_ ]+$/
Run Code Online (Sandbox Code Playgroud)
它应该允许这样的文件名:
aaa
aaa.ext
a#
A9#.ext
Run Code Online (Sandbox Code Playgroud)
不允许使用以下字符 \ / : * ? \" < > |
问题是文件名喜欢*.txt或/\kk通过验证.我正在使用keyup事件进行验证.因此,当我在不允许的情况下放置一个额外字符后,它会显示一切正确.
And*_* D. 32
对于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');
Run Code Online (Sandbox Code Playgroud)
您需要使用^和锚定表达式$.例如:
/^[-\w^&'@{}[\],$=!#().%+~ ]+$/
Run Code Online (Sandbox Code Playgroud)
请注意,您需要-在字符类中转义,或者将其放在第一个/最后一个.
您需要添加一个起始锚点:
/^[0-9a-zA-Z ... ]+$/
Run Code Online (Sandbox Code Playgroud)
这告诉引擎从输入的开始一直到输入的结尾匹配,而对于原始表达式,它只需要在输入的末尾匹配.
/^(?!\.)(?!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 .
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
35679 次 |
| 最近记录: |