【发布时间】:2010-10-29 10:43:23
【问题描述】:
我在弄清楚如何构建正则表达式来验证 netbios 名称时遇到了这个问题。根据 ms 标准,这些字符是非法的 \/:*?"|
所以,这就是我要检测的内容。我的正则表达式看起来像这样
^[\\\/:\*\?"\<\>\|]$
但是,那行不通。
谁能指出我正确的方向? (不是 regexlib.com 请...) 如果重要的话,我正在使用 php 和 preg_match。
谢谢
【问题讨论】:
我在弄清楚如何构建正则表达式来验证 netbios 名称时遇到了这个问题。根据 ms 标准,这些字符是非法的 \/:*?"|
所以,这就是我要检测的内容。我的正则表达式看起来像这样
^[\\\/:\*\?"\<\>\|]$
但是,那行不通。
谁能指出我正确的方向? (不是 regexlib.com 请...) 如果重要的话,我正在使用 php 和 preg_match。
谢谢
【问题讨论】:
就目前而言,您的正则表达式将匹配字符串的开头 (^),然后是 恰好是方括号中的字符之一(即非法字符),然后然后是字符串的结尾 ($)。
所以这可能不起作用,因为长度 > 1 的字符串将很容易无法匹配正则表达式,因此被认为是好的。
您可能不需要开始和结束锚点(^ 和 $)。如果你删除这些,那么正则表达式应该匹配出现在输入文本中任何位置的括号字符之一,这就是你想要的。
(根据具体的正则表达式方言,您在方括号内可能需要较少的反斜杠,但在任何情况下它们都不太可能造成任何伤害)。
【讨论】:
你的正则表达式有两个问题:
[])中,您只需要引用字符类中的特殊字符,即连字符、方括号、反斜杠。以下电话对我有用:
preg_match('/[\\/:*?"<>|]/', "foo"); /* gives 0: does not include invalid characters */
preg_match('/[\\/:*?"<>|]/', "f<oo"); /* gives 1: does include invalid characters */
【讨论】: