регулярное выражение для физического пути - PullRequest
0 голосов
/ 01 июля 2010

может кто-нибудь сказать мне регулярное выражение JavaScript для физического пути, как

1) Пользователь должен ввести что-то подобное в текстовое поле (c: // Folder1 /). Может быть, в d: или e:

2) Но после этого приемлемо

a) (c: // Folder1 / Folder2 /)

b) (d: //Folder1/Folder2/Folder3/abc.txt)

e) (c: //Folder1/Folder2/Folder3/abc.txt)

Ответы [ 2 ]

1 голос
/ 01 июля 2010

Эта проблема на самом деле сложнее, чем вы думаете.Вы пытаетесь проверить путь, но пути могут быть удивительно сложны для правильной проверки.Правильно ли вы обрабатываете сетевые пути UNC, например?

Это известно как проблема канонизации и является частью написания безопасного кода.Я предлагаю проверить некоторые рекомендации от Microsoft для правильной канонизации и проверки пути в вашем приложении.Преимущество канонизации вашего пути заключается в том, что вы также неявно проверяете его формат, потому что каноническая форма будет возвращена из вызова библиотеки, который будет возвращать только пути, которые являются потенциально действительными (правильно отформатированными).Это означает, что вам вообще не нужно выполнять какие-либо проверки регулярных выражений.Просто добавьте строку в метод, который канонизирует путь (Path.GetFullPath(), вероятно) и обработайте исключение для неверного пути.

1 голос
/ 01 июля 2010

Из приведенных вами примеров, что-то вроде этого должно работать:

[a-zA-Z]://(\w+/)+

есть:
[a-zA-Z] = одна буква (в верхнем или нижнем регистре)
затем
:// = символы ": //"
затем:
(\w+/)+ = хотя бы одно "что-то /".
«что-то /» определяется как:
\w+ = хотя бы один символ слова (т. Е. Любой алфавитно-цифровой), за которым следует
/ = буквенный символ "/"

Надеюсь, это поможет - мой синтаксис может быть немного неправильным, так как я не совсем в курсе варианта JavaScript для регулярных выражений.

Редактировать: поместить регулярное выражение в теги кода, чтобы оно было видно! И привести в порядок объяснение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...