Вы не можете делать это только с Javascript. Вам понадобится код на стороне сервера (PHP, в вашем случае), который служит прокси-сервером между БД и клиентским кодом.
Единственным символом linux (и unix), который не разрешен в пути к файлу, является символ ascii nul \0
(он недопустим, поскольку он используется в качестве ограничителя строк --- в этом случае терминатор имени пути --- в открытом (2) системном вызове, поэтому вы можете иметь только один, в конце, не считая символом файла). Старые стили запретили группировку нескольких косичек /
, поэтому правильное регулярное выражение будет (\/?[^\0/])+|\/
(последовательность необязательного символа косой черты, за которой следует не-нулевой символ и символ не слэш, или только запись /
- указав корневой каталог), который позволяет использовать все символы, но ascii nul, и не допускает одновременного отображения двух слэшей. Недавние реализации позволяют группировать косые черты (сворачивая их в один), поэтому допустимый путь regexp будет [^\0]+
.
Но это соответствует всем введенным вами данным (даже, он будет соответствовать всем входам как один путь к файлу, так как символы \n
разрешены как часть имени файла), поэтому вам нужно быть более точным в своем вопросе, чтобы разоблачить то, что вы хотите, и то, что вы не хотите принимать. "foo.log was written"
и "the file "
(с этим конечным пространством) являются действительными именами файлов в linux (и в unix). как насчет других управляющих символов? Что относительно escape-последовательностей, символов wildcar (например *
или ?
) и т. Д.?
Для абсолютного пути к файлу:
^(\/[\w^ ]+)+\/?([\w.])+[^.]$
Для абсолютного пути к папке:
^(\/[\w^ ]+)+\/?$