允许空格、unicode字母、数字、下划线、破折号和逗号


Allow whitespace, unicode letters, digits, underscore, dash AND comma?

我对主题preg很陌生,我使用这个preg_match条件来检查用户是否输入了空白,unicode字母,数字,下划线或破划线:

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

但是现在我想允许逗号。所以我试着这样做:

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

它实际上工作,我只是想知道为什么。我只是想更好地理解它。为什么必须是,_-而不是-_,才能有逗号呢?

如果有人能一步一步地给我解释一下,我将非常感激。

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

所以只要你把它放在最后,你就没事了,不必转义它。在所有其他情况下,您必须用反斜杠转义,例如'- .

的意思是:<>之前,_-//在最后_,-//最后'-,_//转义'-_,//转义,'-_//转义_'--//转义

当我们在括号内或字符类中工作时,-表示字符范围,就像[a-z]一样。因此,如果您将破折号放置在字符类末尾以外的任何位置,它将不会被解释为文字破折号,而是作为字符范围指示符。