我对主题preg
很陌生,我使用这个preg_match
条件来检查用户是否输入了空白,unicode字母,数字,下划线或破划线:
if(preg_match("/[^'040'pL'pN_-]/u", $term)) {
但是现在我想允许逗号。所以我试着这样做:
if(preg_match("/[^'040'pL'pN,_-]/u", $term)) {
它实际上工作,我只是想知道为什么。我只是想更好地理解它。为什么必须是,_-
而不是-_,
才能有逗号呢?
如果有人能一步一步地给我解释一下,我将非常感激。
这是因为-
用于方括号中的范围([]
->字符类)。如从手册:indicates character range
,示例:0-9
或a-z
。
所以只要你把它放在最后,你就没事了,不必转义它。在所有其他情况下,您必须用反斜杠转义,例如'-
.
的意思是:<>之前,_-//在最后_,-//最后'-,_//转义'-_,//转义,'-_//转义_'--//转义
当我们在括号内或字符类中工作时,-
表示字符范围,就像[a-z]
一样。因此,如果您将破折号放置在字符类末尾以外的任何位置,它将不会被解释为文字破折号,而是作为字符范围指示符。