Javascript 需要用于可接受文件名的正则表达式
我正在使用Fancy Upload 3和onSelect来选择一个文件,我需要运行一个检查以确保用户的文件名中没有任何错误字符。我目前正在让人们上传带有象形文字之类名字的文件 我需要检查文件名是否只包含:Javascript 需要用于可接受文件名的正则表达式,javascript,regex,Javascript,Regex,我正在使用Fancy Upload 3和onSelect来选择一个文件,我需要运行一个检查以确保用户的文件名中没有任何错误字符。我目前正在让人们上传带有象形文字之类名字的文件 我需要检查文件名是否只包含: [\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF] [\x80-\xA5] ¡£¢§¶ª«ø¨¥®´åß©¬æ÷µç ™∞•–≠'"πˆ†∑œ∂ƒ˙∆˚…≥≤˜∫√≈Ω var filenameReg = /^([A-Za-z0-9\-_. ]|[\x0
[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]
[\x80-\xA5]
¡£¢§¶ª«ø¨¥®´åß©¬æ÷µç
™∞•–≠'"πˆ†∑œ∂ƒ˙∆˚…≥≤˜∫√≈Ω
var filenameReg = /^([A-Za-z0-9\-_. ]|[\x00A0-\xD7FF\xF900-\xFDCF\xFDF0-\xFFEF])+$/;
[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]
[\x80-\xA5]
¡£¢§¶ª«ø¨¥®´åß©¬æ÷µç
™∞•–≠'"πˆ†∑œ∂ƒ˙∆˚…≥≤˜∫√≈Ω
var filenameReg = /^([A-Za-z0-9\-_. ]|[\x00A0-\xD7FF\xF900-\xFDCF\xFDF0-\xFFEF])+$/;
还有这个:
[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]
[\x80-\xA5]
¡£¢§¶ª«ø¨¥®´åß©¬æ÷µç
™∞•–≠'"πˆ†∑œ∂ƒ˙∆˚…≥≤˜∫√≈Ω
var filenameReg = /^([A-Za-z0-9\-_. ]|[\x00A0-\xD7FF\xF900-\xFDCF\xFDF0-\xFFEF])+$/;
但这两份报告都没有完全涵盖目前的情况
应该起作用的例子:
var filenameReg = /^([A-Za-z0-9\-_. ]|[\x00A0-\xD7FF\xF900-\xFDCF\xFDF0-\xFFEF])+$/;
var filenameReg = /^[A-Za-z0-9-_]|[\x00A0-\xD7FF\xF900-\xFDCF\xFDF0-\xFFEF]+$/;
提前谢谢
Zafer的解决方案基本上是可行的,但它并没有捕获所有其他符号,见下文 未捕获:
[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]
[\x80-\xA5]
¡£¢§¶ª«ø¨¥®´åß©¬æ÷µç
™∞•–≠'"πˆ†∑œ∂ƒ˙∆˚…≥≤˜∫√≈Ω
var filenameReg = /^([A-Za-z0-9\-_. ]|[\x00A0-\xD7FF\xF900-\xFDCF\xFDF0-\xFFEF])+$/;
捕获:
[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]
[\x80-\xA5]
¡£¢§¶ª«ø¨¥®´åß©¬æ÷µç
™∞•–≠'"πˆ†∑œ∂ƒ˙∆˚…≥≤˜∫√≈Ω
var filenameReg = /^([A-Za-z0-9\-_. ]|[\x00A0-\xD7FF\xF900-\xFDCF\xFDF0-\xFFEF])+$/;
Regex:
[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]
[\x80-\xA5]
¡£¢§¶ª«ø¨¥®´åß©¬æ÷µç
™∞•–≠'"πˆ†∑œ∂ƒ˙∆˚…≥≤˜∫√≈Ω
var filenameReg = /^([A-Za-z0-9\-_. ]|[\x00A0-\xD7FF\xF900-\xFDCF\xFDF0-\xFFEF])+$/;
以下方面应起作用:
var filenameReg = /^([A-Za-z0-9\-_. ]|[\x00A0-\xD7FF\xF900-\xFDCF\xFDF0-\xFFEF])+$/;
我将\放在-旁边,并将两个表达式分组,否则+号不会影响第一个表达式
编辑1:我也放了。在表达式中 以下方法应该有效:
var filenameReg = /^([A-Za-z0-9\-_. ]|[\x00A0-\xD7FF\xF900-\xFDCF\xFDF0-\xFFEF])+$/;
我将\放在-旁边,并将两个表达式分组,否则+号不会影响第一个表达式
编辑1:我也放了。在表达式中 两个字符之间的(即[abc]|[def]
)可以简化为一个字符类([abcdef]
)——第一个可以读作“(a或b或c)或(d或e或f)”;第二个字母是“(a或b或c或d或e或f)”。可能会使正则表达式出错的是第一个类中未替换的破折号——如果需要文字破折号,它应该是类中的最后一个字符
因此,我们将修改您的表达式以使其正常工作:
var filenameReg = /^[A-Za-z0-9_\x00A0-\xD7FF\xF900-\xFDCF\xFDF0-\xFFEF-]+$/;
现在的问题是您没有考虑文件扩展名,但这是一个简单的修改(假设您总是得到.zip文件):
如果扩展名不同,用另一个模式替换zip
。两个模式(即[abc]|[def]
)可以简化为单个字符类([abcdef]
)——第一个可以读作“(a或b或c)或(d或e或f)”;第二个字母是“(a或b或c或d或e或f)”。可能会使正则表达式出错的是第一个类中未替换的破折号——如果需要文字破折号,它应该是类中的最后一个字符
因此,我们将修改您的表达式以使其正常工作:
var filenameReg = /^[A-Za-z0-9_\x00A0-\xD7FF\xF900-\xFDCF\xFDF0-\xFFEF-]+$/;
现在的问题是您没有考虑文件扩展名,但这是一个简单的修改(假设您总是得到.zip文件):
如果扩展名不同,请用另一个模式替换
zip
。对于不同的平台,我们有不同的规则。但我想你指的是windows中的长文件名。为此,您可以使用以下正则表达式:
var longFilenames=@“^[^\./:*\?\”“\\\\\\\”]{1}[^\/:*\?\”“\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
注意:您需要说哪些字符是不允许的,而不是说哪些字符是允许的
但请记住,这不是100%完整的正则表达式。如果你真的想让它完整,你也必须为保留名称添加例外
您可以在此处找到有关文件名规则的更多信息:
对于不同的平台,我们有不同的规则。但我想你指的是windows中的长文件名。为此,您可以使用以下正则表达式: var longFilenames=@“^[^\./:*\?\”“\\\\\\\”]{1}[^\/:*\?\”“\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ 注意:您需要说哪些字符是不允许的,而不是说哪些字符是允许的 但请记住,这不是100%完整的正则表达式。如果你真的想让它完整,你也必须为保留名称添加例外 您可以在此处找到有关文件名规则的更多信息:
看起来是字符范围导致了问题,因为它们之间包含一些不允许的字符。由于您已经有了允许的字符列表,最好直接使用该列表:
var filenameReg = /^[A-Za-z0-9_\-\ ÀÈÌÒÙàèìòùÁÉÍÓÚÝáéíóúýÂÊÎÔÛâêîôûÃÑÕãñõÄËÏÖÜäëïöü]+$/;
看起来是字符范围导致了问题,因为它们之间包含一些不允许的字符。由于您已经有了允许的字符列表,最好直接使用该列表:
var filenameReg = /^[A-Za-z0-9_\-\ ÀÈÌÒÙàèìòùÁÉÍÓÚÝáéíóúýÂÊÎÔÛâêîôûÃÑÕãñõÄËÏÖÜäëïöü]+$/;
问题是它不接受双字节字符。比如键入Alt+e,然后键入e以获取é(')+e)。我想我知道为什么我的测试不起作用了。我想这是因为我的javascript不在一个单独的文件中,而编码是错误的,因为html文档。让我检查一下,因为你的例子确实有效。是的,编码可能是个问题。将文件编码改为UTF8可能会有所帮助。嗯,编码是utf-8。检查其他一些东西,以防对任何人都有帮助。它决定了价值的来源。出于某种原因,从输入字段中提取值会产生稍有不同的结果,但是当应用于上载脚本并计算输入的文件名时,它工作得非常好。问题是它不接受双字节字符。比如键入Alt+e,然后键入e以获取é(')+e)。我想我知道为什么我的测试不起作用了。我想这是因为我的javascript不在一个单独的文件中,而编码是错误的,因为html文档。让我检查一下,因为你的例子确实有效。是的,编码可能是个问题。将文件编码改为UTF8可能会有所帮助。嗯,编码是utf-8。检查其他一些东西,以防对任何人都有帮助。它决定了价值的来源。出于某种原因,从i