PHP如何编写正则校验仅允许单根短横线分隔的合法JPG图片文件名
PHP JPG文件名合法性校验正则调整方案
最终调整后的正则
仅匹配小写.jpg后缀:/^[a-z0-9]+(-[a-z0-9]+)*\.jpg$/
如果需要同时支持大写.JPG后缀,可添加i修饰符:/^[a-z0-9]+(-[a-z0-9]+)*\.jpg$/i
规则逻辑说明
你之前使用的正则存在3个核心问题:
- 没有限定字符串首尾边界,会匹配文件名前后包含多余字符的情况
.没有转义,会匹配任意字符而非仅匹配英文句号- 允许短横线无限制连续、出现在开头或结尾
新正则的规则逻辑完全匹配需求:
^限定匹配字符串开头,避免前缀多余字符[a-z0-9]+要求文件名开头必须是小写字母或数字,禁止短横线开头(-[a-z0-9]+)*仅允许出现「单个短横线+至少一个字母/数字」的组合,且可重复0次或多次,从规则上杜绝连续短横线、短横线结尾的情况\.jpg严格匹配.jpg后缀,.转义后仅匹配英文句号$限定匹配字符串结尾,避免后缀多余字符
PHP 使用示例
// 校验文件名是否合法 $filename = 'test-123-thumbnail.jpg'; if (preg_match('/^[a-z0-9]+(-[a-z0-9]+)*\.jpg$/', $filename)) { // 合法逻辑 echo '文件名符合要求'; } else { // 非法逻辑 echo '文件名格式错误'; }
校验效果验证
- 可正常通过的合法文件名:
test-file.jpg、test-123-test.jpg、123-456-thumbnail.jpg - 会被拦截的非法文件名:
test--123----.jpg、-test.jpg、test-.jpg、test@demo.jpg、test.jpg.php
内容的提问来源于stack exchange,提问作者coding_newbie
相关产品推荐
相关产品推荐

