PHP preg_match表达式与正确的字符不匹配

时间:2013-12-09 18:27:07

标签: php regex validation preg-match

我正在尝试捕捉任何不是字母,数字或。-_(句号,短划线,下划线)的字符

我的代码是

return !preg_match('/[^A-Za-z0-9.-_]/', $strToFilter);

我希望它在找到无效字符时返回false。截至目前,它允许._(句号和下划线)但不允许 - (破折号)。它也不会检测/,\,[,],%,^等字符作为无效字符。

我的表情有什么问题?

2 个答案:

答案 0 :(得分:3)

在正则表达式字符类中,除非是:

,否则无法匹配文字连字符
  1. 立即反对任何一个括号,
  2. 遵循否定插入符号(^)或
  3. 使用反斜杠(\
  4. 进行转义
      

    连字符可以在开始括号之后,或在右括号之前,或在否定插入符之后。 [-x]和[x-]都匹配x或连字符。 [^ -x]和[^ x-]匹配任何字符不是x或连字符。这适用于本教程中讨论的所有风格。在无法形成范围的字符类中的其他位置处的连字符可能被解释为文字或错误。正则表达式的味道与此非常不一致。

    Source - 参见字符类内的元字符

答案 1 :(得分:0)

逃离破折号:

return !preg_match('/[^A-Za-z0-9.\-_]/', $strToFilter);