Регулярное выражение для устранения двойного периода (..) при загрузке файла

#regex

#регулярное выражение

Вопрос:

Я хочу избежать .. для файлов изображений. В моих проверках регулярное выражение гласит:

 %r{.(gif|png|jpg)$}i 
  

для URL-адресов изображений. Проблема в том, что fred..png также передаст вместо распознавания double ..

Спасибо за помощь.

Комментарии:

1. На каком языке это? Ruby?

Ответ №1:

Чтобы предотвратить описанный вами случай, который был бы только для двойной точки прямо перед расширением:

 %r{[^.].(gif|png|jpg)$}i 
  

Редактировать: Если вы хотите, чтобы оно было таким, которого .. нет нигде в строке, было бы проще всего сделать это в коде (псевдо: if regex.matches(filename) and '..' not in filename ).

Комментарии:

1. Вы пробовали это? Не работает. Потому что он видит . и останавливается. Вот почему вы должны использовать поиск сзади.

2. Моя ошибка, рассматривал пустые имена.

3. Я думаю, это зависит от OP, хочет ли он, чтобы «.. gif» был действительным или нет. Хотя звучит не так.

Ответ №2:

Может быть, что-то вроде приведенного ниже?

 %r{.(?<!..)(gif|png|jpg)$}i
  

Отрицательный просмотр назад, чтобы увидеть .. , не происходит