我想抓住那不是字母,數字或任何字符。-_(週期,短劃線,下劃線)PHP的preg_match表達不匹配正確的字符
我的代碼是
return !preg_match('/[^A-Za-z0-9.-_]/', $strToFilter);
我希望當它找到一個無效的字符時它會返回錯誤。到目前爲止它允許._(句號和下劃線)但不允許 - (短劃線)。它也不會檢測//\,[,],%,^等字符作爲無效字符。
我的表情有什麼問題?
我想抓住那不是字母,數字或任何字符。-_(週期,短劃線,下劃線)PHP的preg_match表達不匹配正確的字符
我的代碼是
return !preg_match('/[^A-Za-z0-9.-_]/', $strToFilter);
我希望當它找到一個無效的字符時它會返回錯誤。到目前爲止它允許._(句號和下劃線)但不允許 - (短劃線)。它也不會檢測//\,[,],%,^等字符作爲無效字符。
我的表情有什麼問題?
在正則表達式字符類,你不能,除非它是匹配一個連字符:
^
)或\
)連字符可以包含在右括號之後,或者在右括號之前,或者在否定脫字符之後。 [-x]和[x-]都匹配x或連字符。 [^ -x]和[^ x-]匹配任何不是x或連字符的字符。這適用於本教程討論的所有風格。字符類別中其他位置的連字符不能形成範圍,可能會被解釋爲文字或錯誤。正則表達式的風格對此很不一致。
Source - 見元字符內字符類。
只是逃避破折號:
return !preg_match('/[^A-Za-z0-9.\-_]/', $strToFilter);
立即反對括號或否定插入符號不是唯一的解決方案。如果您添加轉義到您的答案+1 ;-) –