我想检查一个字符串是否是文件名(名称 DOT ext)。
文件名不能包含/ ? * : ; { } \
你能建议我在 preg_match() 中使用的正则表达式吗?
我想检查一个字符串是否是文件名(名称 DOT ext)。
文件名不能包含/ ? * : ; { } \
你能建议我在 preg_match() 中使用的正则表达式吗?
干得好:
"[^/?*:;{}\\]+\\.[^/?*:;{}\\]+"
“一个或多个不是这些字符的字符,然后是一个点,然后是更多不是这些字符的字符。”
(只要您确定确实需要点 - 如果不是,它很简单:"[^/?*:;{}\\]+"
$a = preg_match('=^[^/?*;:{}\\\\]+\.[^/?*;:{}\\\\]+$=', 'file.abc');
^ ... $ - begin and end of the string
[^ ... ] - matches NOT the listed chars.
正则表达式类似于(对于三个字母扩展名):
^[^/?*:;{}\\]+\.[^/?*:;{}\\]{3}$
PHP 需要转义反斜杠,并且preg_match()
需要转义正斜杠,所以:
$pattern = "/^[^\\/?*:;{}\\\\]+\\.[^\\/?*:;{}\\\\]{3}$/";
要匹配类似"hosts"
or的文件名".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
}
请记住,在这种情况下允许的特殊字符只有-
和_
。要允许更多,只需将它们从$pattern