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

Php 用于查找有效文件名的正则表达式,php,regex,validation,preg-match,Php,Regex,Validation,Preg Match,我想检查字符串是否是文件名(name DOT ext) 文件名不能包含/?*:;{}\ 您能给我推荐在preg_match()中使用的正则表达式吗?给您: "[^/?*:;{}\\]+\\.[^/?*:;{}\\]+" 一个或多个不是这些字符中任何一个的字符,然后是一个点,然后是一些不是这些字符的字符 (只要您确定确实需要点-如果不需要,则只需:“[^/?*:;{}\\\]+”正则表达式类似于(对于三个字母的扩展名): PHP需要转义反斜杠,preg_match()需要转义正斜杠,因此: $p

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

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

您能给我推荐在preg_match()中使用的正则表达式吗?

给您:

"[^/?*:;{}\\]+\\.[^/?*:;{}\\]+"
一个或多个不是这些字符中任何一个的字符,然后是一个点,然后是一些不是这些字符的字符


(只要您确定确实需要点-如果不需要,则只需:
“[^/?*:;{}\\\]+”

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

PHP需要转义反斜杠,
preg_match()
需要转义正斜杠,因此:

$pattern = "/^[^\\/?*:;{}\\\\]+\\.[^\\/?*:;{}\\\\]{3}$/";
要匹配文件名,如
“hosts”
“.htaccess”
,请使用此稍加修改的表达式:

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

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

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

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

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

if(preg_match($pattern, $discount)) {
    // Returns true
}
$file='file-name_2020.png';
$extensions=array('png','jpg','jpeg','gif','svg');

$pattern='/^[^`~!@$%^&*(+=[\];\”,.\/?>考虑一下
foobar
.htaccess
也是一个有效的文件名。Windows或*nix?POSIX标准允许除
NUL
之外的所有内容。此外,Windows文件不能包含
,也可以包含
{/code>,当然,您可以使用除此之外的其他内容/“若要在preg_match()中分隔正则表达式,则无需特别转义前斜杠,但需要转义新的分隔符字符(如果要在正则表达式中使用它)。警告!类似于
的文件名。
在某些情况下可能会很危险,并且在
^[^/?*:;{}\\\\\\]*\?[^/?*::;{}\\\\\\\\\\]时有效。”+$
@Richie,你真的需要点分隔符前面的第二个反斜杠吗?不应该是…}\\]+\.^/?…@Rob Wells:这是必要的,因为PHP字符串也使用反斜杠作为转义符。PHP字符串中的“\\”在正则表达式中被转换为“\”。而“\”则被转换为“\”。“是一个巧合,因为“\”对PHP没有任何意义,因此保持不变。但是,如果不避开反斜杠,则是草率的。错误即将出现。可能是我的错误,请参阅我输入的$page_regex=“[^/?*:{}\]+\.[^/?*:{}\]+”;$len=$this->REQ_URI_PATH_E_len;//下面给出的$this->REQ_URI_PATH_E_len的长度$page=$this->REQ_URI_PATH_E[$len-1];//保存路径元素,如0=>posts,1=>hello,2=>newp.php,用于localhost/posts/hello/newp.php?id=3如果(preg_-match($page\regex,$page))回显“页面”;否则回显“文件夹”;错误为“警告:preg_match()[function.preg match]:在“我可能语法错误,请更正。字符串开头有两个左括号:”[[为什么不包括分隔符?
/^[^\/\?\*:;{}\\]+\.[^\/\?*:;{}\\\]+.[^\/\*:{}\\\]+$/
若要允许不带扩展名的文件,请使用:
preg\u match('=^[^/?*;:{}\\\]+\.?[^/?*;:{}\\\\\]?$=','file.abc');
    reg := regexp.MustCompile("^/[[:print:]]+(/[[:print:]]+)*$")
$file = 'file-name_2020.png';
$extensions = array('png', 'jpg', 'jpeg', 'gif', 'svg');
$pattern = '/^[^`~!@#$%^&*()+=[\];\',.\/?><":}{]+\.(' . implode('|', $extensions). ')$/u';

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