我想检查字符串是否是文件名(名称为DOT ext)。
文件名称不能包含/ ? * : ; { } \
你能否建议我在preg_match()中使用正则表达式?
答案 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