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