PHP正则表达式允许在此模式中使用破折号

PHP正则表达式允许在此模式中使用破折号,php,regex,Php,Regex,我有一个用于图像文件名验证的正则表达式: /^\w*\(jpg | jpeg | png | gif)$/ 但问题是文件名可以包含破折号-字符。例如:564SDD-DSS.png 我如何将破折号包括在这句话中?我需要逃避吗 /^\w\-*\(jpg | jpeg | png | gif)$/ 或 /^[\w\-]*\(jpg | jpeg | png | gif)$/ 我有点迷路了。只要[\w-]就行了。您可能需要+而不是*,因为我确信basename至少有一个字符长。总而言之: /^[\w-]

我有一个用于图像文件名验证的正则表达式:

/^\w*\(jpg | jpeg | png | gif)$/

但问题是文件名可以包含破折号
-
字符。例如:
564SDD-DSS.png

我如何将破折号包括在这句话中?我需要逃避吗

/^\w\-*\(jpg | jpeg | png | gif)$/

/^[\w\-]*\(jpg | jpeg | png | gif)$/


我有点迷路了。

只要
[\w-]
就行了。您可能需要
+
而不是
*
,因为我确信basename至少有一个字符长。总而言之:

/^[\w-]+\.(jpe?g|png|gif)$/i

请注意,这允许文件名仅为
-.jpg

仅为
[\w-]
即可。您可能需要
+
而不是
*
,因为我确信basename至少有一个字符长。总而言之:

/^[\w-]+\.(jpe?g|png|gif)$/i

请注意,这确实允许文件名仅为“
-.jpg

offtopic尊敬我的作者!”!如果你真的试着运行这些表达式,你会发现最后一个表达式完全符合你的要求,从而避免了一次访问SO.offtopic尊重我的作者!如果你真的试着运行这些表达式,你会发现最后一个表达式完全符合你的要求,并且省去了这么多麻烦。你可能需要添加
i
修饰符。这样,您还可以在文件扩展名中包含大写字母!你能告诉我
在这里做什么:
jpe?g
,它在
@rinchik之前检查一个字符。它使
e
可选,因此它允许
jpeg
jpg
。当然,您也可以使用以前的内容。这并不重要,但是\w已经不区分大小写了。如果您使用[a-z]或任何其他静态键入字母的组合,i修饰符将有所帮助。这只是一个有趣的事实。@suamele是的,但是
i
使扩展不区分大小写,您可能需要添加
i
修饰符。这样,您还可以在文件扩展名中包含大写字母!你能告诉我
在这里做什么:
jpe?g
,它在
@rinchik之前检查一个字符。它使
e
可选,因此它允许
jpeg
jpg
。当然,您也可以使用以前的内容。这并不重要,但是\w已经不区分大小写了。如果您使用[a-z]或任何其他静态键入字母的组合,i修饰符将有所帮助。这只是一个有趣的事实。@sua是的,但是
i
也使扩展不区分大小写