2010-10-29 144 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的字符串将平凡地不匹配正则表达式,因此被认为是正确的。

您可能不需要开始和结束锚点(^$)。如果你删除了这些,那么正则表达式应该匹配输入文本中任何地方出现的括号内的字符之一,这正是你想要的。 (根据确切的正则表达式方言,你可能在方括号内需要较少的反斜杠,但它们不可能在任何情况下造成任何伤害)。