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
也使扩展不区分大小写