Javascript regex for validating filenames

后端 未结 6 1652
失恋的感觉
失恋的感觉 2020-12-01 11:09

I have a regexp to validate file names. Here is it:

/[0-9a-zA-Z\\^\\&\\\'\\@\\{\\}\\[\\]\\,\\$\\=\\!\\-\\#\\(\\)\\.\\%\\+\\~\\_ ]+$/

It

相关标签:
6条回答
  • 2020-12-01 11:48

    Since this post (regex-for-windows-file-name) redirects to this question, I assume its about windows file names.

    And based on the comment and reference by @Leon on the answer by @AndrewD, I made this regular expression and it works for me.

    /^(con|prn|aux|nul|com[1-9]|lpt[1-9])$|([<>:"\/\\|?*])|(\.|\s)$/ig
    

    According to the naming-conventions (see reference above), I agree that "com0" should be a valid file name, but its not working if you try to name a file "com0" on windows, so I guess thats missing in the article.

    So this regular expression would be more safe

    /^(con|prn|aux|nul|com[0-9]|lpt[0-9])$|([<>:"\/\\|?*])|(\.|\s)$/ig
    
    0 讨论(0)
  • 2020-12-01 11:54

    For Windows names.

    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');
    
    0 讨论(0)
  • 2020-12-01 11:57

    You need to anchor the expression by using ^ and $. For example:

    /^[-\w^&'@{}[\],$=!#().%+~ ]+$/
    

    Note that you need to escape - in a character class, or place it first/last.

    0 讨论(0)
  • 2020-12-01 11:58

    I would try something with this Regex (you can even make a validation attribute for ASP.NET MVC with it!):

    @"^[^\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]*$"
    

    If it matches the input, it is valid filename (at least on Windows).

    0 讨论(0)
  • 2020-12-01 12:07

    You need to add a starting anchor:

    /^[0-9a-zA-Z ... ]+$/
    

    This tells the engine to match from the start of the input all the way to the end of the input, whereas for your original expression it only needs to match at the end of the input.

    0 讨论(0)
  • 2020-12-01 12:08
    /^(?!\.)(?!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 .
    
    0 讨论(0)
提交回复
热议问题