需要正则表达式以获取可接受的文件名

时间:2010-09-02 20:42:53

标签: javascript regex

我正在使用Fancy Upload 3和onSelect我需要运行检查以确保用户的文件名中没有任何错误字符。我目前正在让人们上传带有象形文字等文件的文件。

我需要检查文件名是否仅包含:

  1. A-Z
  2. A-Z
  3. 0-9
  4. _(下划线)
  5. - (减号)
  6. SPACE
  7. ÀÈÌÒÙàèìòùÁÉÍÓÚÝáéíóúýÂÊÎÔÛâêîôûÃÑÕãñõÄËÏÖÜäëïöü(单字节和双字节)
  8. 显然你可以看到那里的困难。非英语单字节和双字节字符。

    我见过这个:

    [\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]
    

    而且:

    [\x80-\xA5]
    

    但他们都没有完全覆盖这种情况。

    应该有效的例子:

    1. fást.zip
    2. abc.zip
    3. ABC.zip
    4. Über.zip
    5. 不应该起作用的例子:

      1. ΣΣøΔ.zip
      2. ¡哇!的.zip
      3. •§ªº¶.zip
      4. 以下是接近的,但我不是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])+$/;
        

4 个答案:

答案 0 :(得分:1)

两个Alternation(即[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_\-\ ÀÈÌÒÙàèìòùÁÉÍÓÚÝáéíóúýÂÊÎÔÛâêîôûÃÑÕãñõÄËÏÖÜäëïöü]+$/;