我正在使用此代码,该代码几乎逐字逐句地来自Rasmus Lerdorf的 Programming PHP (第291页),以确保POSTed表单字段'story_title'中的值包含只有字母,空格,单引号或连字符:
if (preg_match('/[^A-Za-z \'\-]/', $_POST['story_title'])) {
die('Illegal characters in story_title.');
} else {
$story_title = $_POST['story_title'];
}
我对PHP不是很熟悉,但我将其读作:
Does $_POST['story_title'] contain letters, hyphens, single quotes and/or spaces?
Yes? Error!
No? Excellent. Proceed.
什么?代码“有效”,因为它会过滤掉不需要的字符(<,>,(,)等),但我不明白它是如何或为什么有效。似乎preg_match
的if语句应该以相反的方式流动,preg_match
如果只存在合法字符则返回true
,如果不存在则false
。$_POST['story_title']
documentation表示“如果模式与给定主题匹配,则preg_match()返回1,如果不匹配,则返回0;如果发生错误,则返回FALSE”并且还警告“此函数可能返回布尔值FALSE,但是也可能返回一个非布尔值,其值为FALSE,“这对我来说只会让事情变得更加模糊。当{{1}}仅包含合法字符时,该函数不应返回1吗?
有人可以解释一下这段代码究竟发生了什么吗?我很高兴它似乎工作,但我很难使用我不理解的代码。
答案 0 :(得分:1)
在正则表达式中,[a-z]
表示“组a到z中的任何字符”,而[^a-z]
表示“组中包含所有但是 a到的任何字符” Z”。