我正在使用Fancy Upload 3和onSelect我需要运行检查以确保用户的文件名中没有任何错误字符。我目前正在让人们上传带有象形文字等文件的文件。
我需要检查文件名是否仅包含:
显然你可以看到那里的困难。非英语单字节和双字节字符。
我见过这个:
[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]
而且:
[\x80-\xA5]
但他们都没有完全覆盖这种情况。
应该有效的例子:
不应该起作用的例子:
以下是接近的,但我不是RegEx'pert,甚至没有关闭。
var filenameReg = /^[A-Za-z0-9-_]|[\x00A0-\xD7FF\xF900-\xFDCF\xFDF0-\xFFEF]+$/;
提前致谢。
Zafer的解决方案大多有效,但它没有捕获所有其他符号,见下文。
未捕获
¡£¢§¶ª«ø¨¥®´åß©¬æ÷µç
夹缝:
™∞•–≠'"πˆ†∑œ∂ƒ˙∆˚…≥≤˜∫√≈Ω
正则表达式:
var filenameReg = /^([A-Za-z0-9\-_. ]|[\x00A0-\xD7FF\xF900-\xFDCF\xFDF0-\xFFEF])+$/;
答案 0 :(得分:1)
[abc]|[def]
)之间的 character classes可以简化为单个字符类([abcdef]
) - 第一个可以读作“({或b或c)或(d或e或f)“;第二个为“(a或b或c或d或e或f)”。可能会使你的正则表达式绊倒的是第一堂课中未转义的短划线 - 如果你想要一个文字短划线,它应该是班上的最后一个角色。
因此我们将修改您的表达式以使其正常工作:
var filenameReg = /^[A-Za-z0-9_\x00A0-\xD7FF\xF900-\xFDCF\xFDF0-\xFFEF-]+$/;
现在的问题是你没有考虑文件扩展名,但这是一个简单的修改(假设你总是得到.zip文件):
var filenameReg = /^[A-Za-z0-9_\x00A0-\xD7FF\xF900-\xFDCF\xFDF0-\xFFEF-]+\.zip$/;
如果扩展名不同,请将zip
替换为其他模式。
答案 1 :(得分:0)
以下内容应该有效:
var filenameReg = /^([A-Za-z0-9\-_. ]|[\x00A0-\xD7FF\xF900-\xFDCF\xFDF0-\xFFEF])+$/;
我把它放在旁边 - 然后将两个表达式分组,否则+符号不会影响第一个表达式。
编辑1:我也说过。在表达中。答案 2 :(得分:0)
我们对不同平台有不同的规则。但我认为你的意思是Windows中的长文件名。为此,您可以使用以下RegEx:
var longFilenames = @“^ [^ \ ./:* \?\”“<> \ |] {1} [^ \ /:* \?\”“<> \ |] { 0254} $“;
注意:您不必说出允许使用哪个字符,而是要说明哪些字符不被允许!
但请记住,这不是100%完整的RegEx。如果你真的想要完成它,你也必须为保留名称添加例外。
您可以在此处找到有关文件名规则的更多信息:
http://msdn.microsoft.com/en-us/library/aa365247%28VS.85%29.aspx
答案 3 :(得分:0)
看起来它是引起问题的字符范围,因为它们之间包含一些不允许的字符。由于您已经拥有允许字符列表,最好的方法就是直接使用它:
var filenameReg = /^[A-Za-z0-9_\-\ ÀÈÌÒÙàèìòùÁÉÍÓÚÝáéíóúýÂÊÎÔÛâêîôûÃÑÕãñõÄËÏÖÜäëïöü]+$/;