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!