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

时间:2017-06-01 22:57:00

标签: php regex image preg-match filenames

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

  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\-
  5. 之外的其他特殊字符

    我已经设法用我在正则表达式中的知识来做到这一点,但我必须验证,如果estring为空,如果有几个图像用逗号分隔,并且没有其他字符而不是字符串。

    $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";
    }
    

    非常感谢你的帮助。

2 个答案:

答案 0 :(得分:1)

这将完成所有这些事情:

/^(?:[\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

分隔

答案 1 :(得分:0)

我认为您可能正在寻找以下内容,因为您的正则表达式并不能解释破折号。

cat /tmp/credentials | ./program

可以在Regexr.com

找到完善正则表达式的绝佳资源

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

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