2013-12-09 74 views
0

我想抓住那不是字母,数字或任何字符。-_(周期,短划线,下划线)PHP的preg_match表达不匹配正确的字符

我的代码是

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

我希望当它找到一个无效的字符时它会返回错误。到目前为止它允许._(句号和下划线)但不允许 - (短划线)。它也不会检测//\,[,],%,^等字符作为无效字符。

我的表情有什么问题?

回答

3

在正则表达式字符类,你不能,除非它是匹配一个连字符:

  1. 立即反对任何支架,
  2. 遵循否定光标(^)或
  3. 使用反斜线(\

连字符可以包含在右括号之后,或者在右括号之前,或者在否定脱字符之后。 [-x]和[x-]都匹配x或连字符。 [^ -x]和[^ x-]匹配任何不是x或连字符的字符。这适用于本教程讨论的所有风格。字符类别中其他位置的连字符不能形成范围,可能会被解释为文字或错误。正则表达式的风格对此很不一致。

Source - 见元字符内字符类

+0

立即反对括号或否定插入符号不是唯一的解决方案。如果您添加转义到您的答案+1 ;-) –

0

只是逃避破折号:

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