====== Regex - File Path - Windows ======
^(?:[a-zA-Z]:\\$)|^(?:[a-zA-Z]\:|\\)(\\(?!\.)(?!\s[a-zA-Z_0-9-\.])[a-zA-Z_\-\s0-9\.\$]+)+$
or
^(\w:\\$)|^(?:[\w]\:|\\)(\\(?!\.)(?!\s[a-zA-Z_0-9-])[a-zA-Z_\-\s0-9\.\$]+)+$
**NOTE:** This is made up of:
* **^(?:[a-zA-Z]:\\$)**: Caters for C:\.
* **^(?:[a-zA-Z]\:|\\)(\\(?!\.)(?!\s[a-zA-Z_0-9-\.])[a-zA-Z_\-\s0-9\.\$]+)+$**: Cater for UNC and standard files with a directory name.
* **^(\w:\\$)**: Caters for C:\.
* **^(?:[\w]\:|\\)(\\(?!\.)(?!\s[a-zA-Z_0-9-])[A-Za-z_\-\s0-9\.\$]+)+$**: Cater for UNC and standard files with a directory name.
**NOTE:** This regex supports the following as valid.
c:\
c:\folder\myfile.txt
c:\folder\myfileWithoutExtension
c:\my folder\abc abc.docx
c:\my-folder\another_folder\abc.v2.docx
C:\pictures\holiday
C:\pictures\holiday\
\\192.168.0.1\folder\file.pdf
\\192.168.0.1\my folder\folder.2\file.gif
\\10.30.28.52\CDSDataCenter\Servers\Continuous\CDS20$
\\server\filename
\\server\filename with space
\\test\test$\TEST.xls
\\server\share\folder\myfile.txt
\\server\share\myfile.txt
\\123.123.123.123\share\folder\myfile.txt
**NOTE:** The following are **not** valid:
file
file.xls
c:\my folder\another_folder\.docx
c:\my folder\\another_folder\abc.docx
c:\my folder\another_folder\ab*c.v2.docx
c:\my?folder\another_folder\abc.v2.docx
C:\ pictures\holiday
C:\ pictures\holiday\
C:\pictures \ holiday
C:\pictures \ holiday\
C:\pictures\ holiday \
\\192.168.0.1\folder\fi
To allow the top two entries to also be accepted as valid entries change the regex to include:
* **^([A-Za-z_\-\s0-9\.\$]+)$**: Caters for plain filenames, such as file.txt or file.
^(\w:\\$)|^([A-Za-z_\-\s0-9\.\$]+)$|^(?:[\w]\:|\\)(\\(?!\.)(?!\s[a-z_0-9-])[A-Za-z_\-\s0-9\.\$]+)+$
To allow the very bottom entry here: **\\server\filename\{token}\file**:
^(?:[a-zA-Z]:\\$)|^(?:[a-zA-Z]\:|\\)(\\(?!\.)(?!\s[a-zA-Z_0-9-\.])\{?[a-zA-Z_\-\s0-9\.\$]+)+(\}\\([a-zA-Z_\-\s0-9\.\$])+?)?$
----
===== References =====
https://www.regexpal.com/97685