2014-02-13 3 views
3

Я пытаюсь проверить последние символы из $url являются одним из следующих:preg_match для конца строки

.gif.png.bmp.jpg.jpeg

Он отлично работает для одного из них:

if(!preg_match('/\.jpg$/',$url))

, но их все вместе не работает:

if(!preg_match('/[\.gif$\.png$\.bmp$\.jpg$\.jpeg$]/',$url))

Что я делаю неправильно?

Благодаря

ответ

5

Вы используете класс персонажа, когда вы хотите чередование ...

"/\.(gif|png|bmp|jpe?g)$/" 
3

Вы не можете «строка» внутри класса символов. Классы символов работают с символами, а не строками. Класс символов может соответствовать только одному из нескольких символов.

Таким образом, следующее регулярное выражение:

/[\.gif$\.png$\.bmp$\.jpg$\.jpeg$]/ 

соответствует одному символу из списка символов между [ и ]. Также помните, что точка не является метасимволом внутри символьного класса, поэтому вам не нужно \. - достаточно всего лишь ., но это не имеет значения, потому что это неправильный подход.

Визуальное представление:

match

Используйте изменения, чтобы достичь того, чего вы хотите. Например, (foo|bar) соответствует fooилиbar. Для ваших требований может работать следующее регулярное выражение:

/\.(gif|png|bmp|jpe?g)$/ 

Хотя, я бы не использовал регулярное выражение для этого. Уже существует функция, которая была построена с определенной целью - определить расширение файла (или URL):

$ext = pathinfo($url, PATHINFO_EXTENSION); 
Смежные вопросы