2010-10-29 194 views
0

我得到這個問題搞清楚如何建立一個正則表達式來驗證NetBIOS名稱。根據MS標準這些字符是非法 \ /:*?」 <> |netbios名稱的正則表達式

所以,這就是我想要檢測我的正則表達式是這樣看

^[\\\/:\*\?"\<\>\|]$ 

但是,這不會工作。

任何人都可以點我在正確的方向?(不regexlib.com請...) 如果它很重要,我在使用PHP與的preg_match。

感謝

回答

1

你的正則表達式有兩個問題:

  1. 你堅持比賽應跨越整個字符串。正如Andrzej所說,您只匹配長度爲1的字符串。
  2. 您引用的字符太多。在字符類(即[])中,只需引用字符類中特殊的字符,即連字符,方括號,反斜槓。

以下調用爲我工作:

preg_match('/[\\/:*?"<>|]/', "foo"); /* gives 0: does not include invalid characters */ 
preg_match('/[\\/:*?"<>|]/', "f<oo"); /* gives 1: does include invalid characters */ 
2

就目前而言,您的正則表達式將匹配字符串(^),然後中的一個正方括號內的字符(即:)。非法字符),然後結束字符串($)。

所以這可能是行不通的,因爲長度> 1的字符串將平凡地不匹配正則表達式,因此被認爲是正確的。

您可能不需要開始和結束錨點(^$)。如果你刪除了這些,那麼正則表達式應該匹配輸入文本中任何地方出現的括號內的字符之一,這正是你想要的。 (根據確切的正則表達式方言,你可能在方括號內需要較少的反斜槓,但它們不可能在任何情況下造成任何傷害)。