允许空格,unicode字母,数字,下划线,短划线和逗号?

时间:2015-05-30 19:04:59

标签: php regex unicode preg-match

我对主题preg非常陌生,并且我使用此preg_match条件来检查用户是否输入了空格,unicode字母,数字,下划线或短划线:

if(preg_match("/[^\040\pL\pN_-]/u", $term)) {

但现在我想要一个逗号。所以我尝试了这个:

if(preg_match("/[^\040\pL\pN,_-]/u", $term)) {

它确实有效,我只是想知道为什么。我只想更好地理解它。为什么它必须是,_-而不是-_,才能使用逗号?

如果有人能够一步一步向我解释,我真的很感激。

2 个答案:

答案 0 :(得分:4)

这是因为-用于方括号中的范围([] - >字符类)。从manualindicates character range开始,例如:0-9a-z

所以只要你把它放在最后你就可以了,不必逃避它。在所有其他情况下,你必须用反斜杠来逃避它,例如\-

意思是:

,_-  //At the end
_,-  //At the end
\-,_ //Escape it
\-_, //Escape it
,\-_ //Escape it
_\-- //Escape it

答案 1 :(得分:0)

当我们在括号内或字符类中工作时,-表示字符范围,例如[a-z]。因此,如果在任何位置放置一个短划线但位于字符类的最后,它不会被解释为文字短划线,而是解释为字符范围指示符。