我遇到了这个问题,弄清楚如何构建一个用于验证netbios名称的正则表达式。根据ms标准,这些字符是非法的 \ /:*?“<> |
那就是我想要发现的东西。我的正则表达式看起来像这样
^[\\\/:\*\?"\<\>\|]$
但是,那不行。
有人能指出我正确的方向吗? (请不要regexlib.com ...) 如果重要的话,我正在使用带有preg_match的php。
由于
答案 0 :(得分:2)
目前,你的正则表达式将匹配字符串的开头(^
),然后正好是方括号中的字符之一(即非法字符) ,然后结束字符串($
)。
所以这可能不起作用,因为一串长度&gt; 1将很难与正则表达式匹配,因此被认为是正确的。
您可能不需要开始和结束锚点(^
和$
)。如果你删除这些,那么正则表达式应匹配输入文本中任何位置出现的括号中的一个字符,这就是你想要的。
(根据确切的正则表达方言,您可以在方括号内规范地减少反斜杠,但在任何情况下它们都不会造成任何伤害。)
答案 1 :(得分:1)
你的正则表达式有两个问题:
[]
)中,您只需引用字符类中特殊的字符,即连字符,方括号,反斜杠。以下调用对我有用:
preg_match('/[\\/:*?"<>|]/', "foo"); /* gives 0: does not include invalid characters */
preg_match('/[\\/:*?"<>|]/', "f<oo"); /* gives 1: does include invalid characters */