我想仅在允许空间的情况下将文件限制为字母数字。
我尝试过:
if (!preg_match('/[^_A-Za-z0-9 -.]/', $file['name'])) { //do something }
if (preg_match("/[^_A-Za-z0-9 -.]/", $file['name']) !== true) { //do something }
if (preg_match("/[^_A-Za-z0-9 -.]/", $file['name']) !== false) { //do something }
if (preg_match("/^[_A-Za-z0-9 -.]/", $file['name']) !== false) { //do something }
if (preg_match("/^[_A-Za-z0-9 -.]/", $file['name']) !== true) { //do something }
if (preg_match('/^[-A-Za-z0-9._]+$/i', $file['name']) !== true) { //do somethin }
在第一个示例中:
test.jpg
被接受。
testä.jpg
也被接受,但不应该被接受。
在第二个示例中:
test.jpg
不被接受,但是应该被接受。
testä.jpg
不被接受。
答案 0 :(得分:0)
对于字符类,您可以使用quantifier,然后逐字匹配点,然后再次使用字符类,指定允许哪些字符与文件名进行更具体的匹配。
^[A-Za-z0-9_ -]+\.[a-zA-Z0-9_]+$
使用锚点开始模式以声明字符串^
的开始(如果在字符类的开头[^
中使用它,则将否定字符类并声明字符串的结尾字符串$
如果只想知道文件名是否包含不应该包含的字符的匹配项,则可以使用:
^[\w.-]+$
例如,使用preg_match并否定它是否不匹配。
您的代码可能如下:
if (!preg_match('/^[\w.-]+$/i', $filename)) {
注意:preg_match的返回值:
preg_match()如果模式与给定主题匹配,则返回1,如果它与给定主题匹配,则返回0 否,如果发生错误则为FALSE。
答案 1 :(得分:-1)
感谢大家的快速帮助。 这个:
if (preg_match('/^[-A-Za-z0-9._]+$/i', $file['name']) == false) { //do error output }
工作完美。只要 - _ 。字符串中接受a-z A-Z 0-9。
是的,我确定。 “演示”是错误的。 演示应该像这样:
$file = ["name" => "test.jpg"];
if (preg_match('/^[-A-Za-z0-9._]+$/i', $file['name']) == false) {
echo "No Match!";
} else {
echo "match!";
}
preg_match给出“ FALSE”,因此“ No Match”必须是答案!
谁给我的回答是“减号” :-( 在减号之前先检查演示。