2013-12-09 49 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); 
相關問題