如何验证零个或多个图像名称,允许空格,以逗号分隔或为空

How to validate zero or more image names, allowing spaces, separated by commas or empty

我需要用正则表达式验证图片,条件如下:

  1. $string可能为空
  2. 我可以收到这种格式的单张图片,例如:2017-06-01-03-55-00-5930782c5c0b1.jpg
  3. 我可以得到几个用逗号分隔的图像名称示例:2017-06-01-03-55-00-5930782c5c0b1.jpg, 2017-06-01-03-55-00-5930782c5c0b1.jpg
  4. 避免除这些之外的其他特殊字符:A-Za-z0-9\-

我已经利用我在正则表达式方面的知识做到了这一点,但我必须验证,如果字符串为空,是否有多个图像以逗号分隔,以及除了字符串之外是否没有其他字符。

$pattern = '/[a-zA-Z0-9]\.(jpg|jpeg|png|gif)$/';
$string = '2017-06-01-03-55-00-5930782c5c0b1.jpg';

if( preg_match($pattern, $string) ) {
    echo "TRUE";
} else {
    echo "FALSE";
}

非常感谢您的帮助。

我认为您可能正在寻找以下内容,因为您的正则表达式模式没有考虑破折号。

/[a-z0-9-]+\.(jpg|jpeg|png|gif)/gi

可以在 Regexr.com

找到完善正则表达式的重要资源

表达式末尾的 /g 使模式成为全局模式,查看传递给它的整个字符串而不是找到第一个匹配项并停止。

表达式末尾的 /i 表示不区分大小写,因此您不必同时包含 a-z 和 A-Z。

这将完成所有这些事情:

/^(?:[\dA-Za-z-]+\.(?:jpe?g|png|gif))?(?:, (?:[\dA-Za-z-]+\.(?:jpe?g|png|gif)))*$/

它将匹配以下第 2、3、5 行:

bad_image.jpg

2017-06-01-03-55-00-5930782c5c0b1.jpg
2017-06-01-03-55-00-5930782c5c0b1.jpeg, bad_image.jpg
2017-06-01-03-55-00-5930782c5c0b1.png, 2017-06-01-03-55-00-5930782c5c0b1.gif

这里是Demo。我的模式将匹配零个或多个有效的图像文件名,这些文件名必须用 comma-space

分隔