0

我在弄清楚如何构建正则表达式来验证 netbios 名称时遇到了这个问题。根据 ms 标准,这些字符是非法的 \/:*?"<>|

所以,这就是我想要检测的。我的正则表达式看起来像这样

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

但是,那是行不通的。

谁能指出我正确的方向?(请不要使用 regexlib.com ...)如果重要的话,我正在使用 php 和 preg_match。

谢谢

4

2 回答 2

2

就目前而言,您的正则表达式将匹配字符串的开头 ( ^),然后是方括号中的一个字符(即非法字符),然后是字符串的结尾 ( $)。

所以这可能不起作用,因为长度> 1 的字符串将很容易无法匹配正则表达式,因此被认为是好的。

您可能不需要开始和结束锚点(^$)。如果您删除这些,那么正则表达式应该匹配出现在输入文本中任何位置的括号字符之一,这就是您想要的。

(根据确切的正则表达式方言,您可能在方括号内通常需要较少的反斜杠,但它们在任何情况下都不太可能造成任何伤害)。

于 2010-10-29T10:55:51.043 回答
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 */
于 2010-10-29T11:00:41.823 回答