You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 08:09:04