我正在尝试检查$url
的最后一个字符是否为以下字符之一:
.gif
.png
.bmp
.jpg
.jpeg
它适用于其中一个:
if(!preg_match('/\.jpg$/',$url))
但将它们放在一起并不起作用:
if(!preg_match('/[\.gif$\.png$\.bmp$\.jpg$\.jpeg$]/',$url))
我做错了什么?
由于
答案 0 :(得分:6)
当你想要交替时,你正在使用一个角色类......
"/\.(gif|png|bmp|jpe?g)$/"
答案 1 :(得分:3)
您不能在字符类中放置“字符串”。字符类使用字符,而不是字符串。字符类只能匹配多个字符中的一个。
所以,以下正则表达式:
/[\.gif$\.png$\.bmp$\.jpg$\.jpeg$]/
匹配[
和]
之间的字符列表中的单个字符。另外,请记住,点不是字符类中的元字符,因此您不需要\.
- 只需.
就足够了,但无论如何它都无关紧要,因为这是一种错误的方法。
视觉表现:
使用改动来达到你想要的效果。例如,(foo|bar)
匹配foo
或 bar
。根据您的要求,以下正则表达式可能有效:
/\.(gif|png|bmp|jpe?g)$/
虽然,我不会使用正则表达式。已经有一个为确切目的而构建的函数 - 确定文件(或URL)的扩展名:
$ext = pathinfo($url, PATHINFO_EXTENSION);