我对主题preg
非常陌生,并且我使用此preg_match
条件来检查用户是否输入了空格,unicode字母,数字,下划线或短划线:
if(preg_match("/[^\040\pL\pN_-]/u", $term)) {
但现在我想要一个逗号。所以我尝试了这个:
if(preg_match("/[^\040\pL\pN,_-]/u", $term)) {
它确实有效,我只是想知道为什么。我只想更好地理解它。为什么它必须是,_-
而不是-_,
才能使用逗号?
如果有人能够一步一步向我解释,我真的很感激。
答案 0 :(得分:4)
这是因为-
用于方括号中的范围([]
- >字符类)。从manual:indicates character range
开始,例如:0-9
或a-z
。
所以只要你把它放在最后你就可以了,不必逃避它。在所有其他情况下,你必须用反斜杠来逃避它,例如\-
。
意思是:
,_- //At the end _,- //At the end \-,_ //Escape it \-_, //Escape it ,\-_ //Escape it _\-- //Escape it
答案 1 :(得分:0)
当我们在括号内或字符类中工作时,-
表示字符范围,例如[a-z]
。因此,如果在任何位置放置一个短划线但位于字符类的最后,它不会被解释为文字短划线,而是解释为字符范围指示符。