用于查找有效文件名的正则表达式

时间:2009-06-23 11:56:59

标签: php regex validation preg-match

我想检查字符串是否是文件名(名称为DOT ext)。

文件名称不能包含/ ? * : ; { } \

你能否建议我在preg_match()中使用正则表达式?

5 个答案:

答案 0 :(得分:17)

你走了:

"[^/?*:;{}\\]+\\.[^/?*:;{}\\]+"

“一个或多个不是这些字符的字符,然后是一个点,然后是一些不是这些字符的字符。”

(只要您确定该点确实是必需的 - 如果不是,那就是:"[^/?*:;{}\\]+"

答案 1 :(得分:6)

$a = preg_match('=^[^/?*;:{}\\\\]+\.[^/?*;:{}\\\\]+$=', 'file.abc');

^ ... $ - begin and end of the string
[^ ... ] - matches NOT the listed chars.

答案 2 :(得分:2)

正则表达式就像(对于三个字母的扩展名):

^[^/?*:;{}\\]+\.[^/?*:;{}\\]{3}$

PHP需要反斜杠转义,而preg_match()需要转义斜杠转义,所以:

$pattern = "/^[^\\/?*:;{}\\\\]+\\.[^\\/?*:;{}\\\\]{3}$/";

要匹配"hosts"".htaccess"等文件名,请使用此略微修改的表达式:

^[^/?*:;{}\\]*\.?[^/?*:;{}\\]+$

答案 3 :(得分:0)

在正则表达式下面用于检查Golang程序中的Unix文件名:

    reg := regexp.MustCompile("^/[[:print:]]+(/[[:print:]]+)*$")

答案 4 :(得分:0)

这是具有特定文件扩展名的易于使用的解决方案:

$file = 'file-name_2020.png';
$extensions = array('png', 'jpg', 'jpeg', 'gif', 'svg');
$pattern = '/^[^`~!@#$%^&*()+=[\];\',.\/?><":}{]+\.(' . implode('|', $extensions). ')$/u';

if(preg_match($pattern, $discount)) {
    // Returns true
}

请记住,这种情况下允许使用的特殊字符仅为-_。要允许更多,只需将它们从$pattern

中删除