Regular expression to match a valid absolute Windows directory containing spaces

regex

Solution

Here's a regex that will work:

`^[a-zA-Z]:\\(((?![<>:"/\\|?*]).)+((?<![ .])\\)?)*$`

It makes the path conform to the NTFS standard (see the MSDN spec). I'll break it down:

`^[a-zA-Z]:\\` matches single drive letter, with colon and backslash

`(?![<>:"/\\|?*])` is a negative lookahead to ensure the next character is not invalid

`((?![<>:"/\\|?*]).)+` wraps that lookahead, followed by the next character, any number of times

`(?<![ .])\\` is a negative lookbehind to ensure the file/directory doesn't end with a space or period. Please note: Lookbehinds are not fully implemented everywhere just yet.

All of that is is repeated 0 to many times, with the last backslash optional.

For many use cases it may be best to restrict the path length to 256 characters. To do so, replace `*`with `{0,256}`.

EDIT: allow root directory

Problem

I would like a regular expression to match a valid absolute Windows directory path, where directory names can contain spaces. Example matches: ``` C:\pictures\holiday (without trailing backslash) C:\pictures\holiday\ (or with trailing backslash) C:\ pictures\holiday C:\ pictures\holiday\ C:\pictures \ holiday C:\pictures \ holiday\ C:\pictures\ holiday \ ``` Example fails: ``` \pictures\holiday (no relative path allowed) C:\pictures*\holiday (not a valid directory path) ``` I have tried `^[a-zA-Z]:(\\\w+)*([\\])?$` but that does not match the spaces. I have also tried `^[a-zA-Z]:(\s)*(\\\w+)*(\s)*([\\])?$` but that works erratically. Regular expressions are my last resort. I have also tried to validate the text box using a non-regex solution, like in this answer. But I have not found a method that works for spaces. Thanks in advance!

Original source

Related problems