регулярные выражения и "[]"

Royal Flash

-=MaestrO=-
регулярные выражения и "[]"

Вот есть такое рег. выражение:
PHP:
if (!ereg("^[a-zA-Zа-яА-Я0-9_!\s\-]{1,30}\.[jpg|jpeg|gif]+$", $img))
Проблема в том, что я не могу в него включить квадратные скобки "[ и ]". Выражение нужно для фильтрации имен графичесских файлов, а так как в них зачастую встречаются квадратные скобки (картинки из кеша эксплоурера 407693[1].jpg), то необходимо их задействовать.
PHP:
if (!ereg("^[a-zA-Zа-яА-Я0-9_!\s\-\[\]]{1,30}\.[jpg|jpeg|gif]+$", $img))
- не работает вообще...

Я думаю, что с этой проблемой сталкивались не раз, просьба поделится своими вариантами решения этой задачи.
 

Profic

just Profic (PHP5 BetaTeam)
это "задача" яйца выеденного не стоит
1) используем [m]preg_match[/m]()
2) читаем рядом про синтаксис
 

_RVK_

Новичок
Следует еще внимание что "Имеются два различных набора метасимволов: распознаваемые в любом месте патэрна, кроме квадратных скобок, и те, которые распознаются в квадратных скобках." (с) manual
 

Royal Flash

-=MaestrO=-
Profic
Если не заметно - reg_match() используем.
И просьба была поделится вариантом решения - 1 строчка кода, а не перенаправлением на мануал, который я уже читал...

Может кто-нибуть направит меня на путь истенный?
 

itprog

Cruftsman
Royal Flash
наверно я тоже слепой, не вижу чтоб там preg_match или reg_match() использовался
 

Royal Flash

-=MaestrO=-
itprog
Profic
Сорри... :( Сам и не заметил... С preg_match все работает:
PHP:
if (!preg_match("^[a-zA-Zа-яА-Я0-9_!\s\-\[\]]{1,30}\.[jpg|jpeg|gif]+$", $img))
Может кто-то подскажет, что, что не должно содержаться в имени файла, может пройти сквозь данное условие?
 

SiMM

Новичок
> С preg_match все работает:
Это заблуждение.
Пример:
a.j
[m]reference.pcre.pattern.syntax#regexp.reference.subpatterns[/m]
 

_RVK_

Новичок
И просьба была поделится вариантом решения - 1 строчка кода, а не перенаправлением на мануал, который я уже читал
А я читал мануал уж раз 100 и не думаю что это достаточно много. Постарайся быть вежлевее. Тебе тут ничем не обязанны, а помогают за просто так. По доброте душевной.
 

Profic

just Profic (PHP5 BetaTeam)
SiMM
что самое интересное, файл вида "a.|" тоже пройдет :) другое дело что под виндами его не создашь. но под юниксами - легко :)

Royal Flash
Hint: поменяй [] на (), но где подумай сам.
А вообще в юниксе имя файла может содержать любые символы кроме "/". У винды запрещенных символов больше. Их легко можно узнать если попробовать в том же Explorer-е любой современной винды при переименовании написать например тоот же "/".
 

Royal Flash

-=MaestrO=-
_RVK_
Бывает, что нужно решить вопрос как можно быстрее, и на чтение и разбор мануала, времени, ксожалению, совсем нет... Хотя почти все необходимое там есть.


Profic
Спасибо!
if (!preg_match("~^[a-z0-9_!\.\s\-\[\]]{1,30}\.(jpg|jpeg|gif)+$~i", $img)) вот теперь все работает. Догадаться, что будут срабатывать "|" и отдельные буквы из условия я не мог :), а читать мануал в то время біло некогда...

Только никак не могу понять, почему ссылки на картинки с русскими именами не открываются? <img src="файл.jpg"> 6 эксплоурер открывать отказывается, точнее изображение не открывается... Если переименовать в file.jpg - все ок...
 

DiTHER

bang bang
> а читать мануал в то время біло некогда...
а сейчас есть? Ну тогда..

> <img src="файл.jpg"> 6 эксплоурер открывать отказывается, точнее изображение не открывается...

что ж чувак ты встрял =)
http://httpd.apache.org/docs/2.0/mod/mod_charset_lite.html#charsetsourceenc

3 года назад это бурно мясили в
http://apache.lexa.ru/mail-archive/msg04073.html
советую почитать
 
Сверху