netbios 名称的正则表达式

发布于 2024-09-29 22:16:37 字数 273 浏览 4 评论 0原文

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

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

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

但是,那行不通。

任何人都可以指出我正确的方向吗?(请不是 regexlib.com。 ..) 如果重要的话,我将 php 与 preg_match 一起使用。

谢谢

I got this issue figuring out how to build a regexp for verifying a netbios name. According to the ms standard these characters are illegal
\/:*?"<>|

So, thats what I'm trying to detect. My regex is looking like this

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

But, that wont work.

Can anyone point me in the right direction? (not regexlib.com please...)
And if it matters, I'm using php with preg_match.

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梨涡少年 2024-10-06 22:16:37

您的正则表达式有两个问题:

  1. 您坚持认为匹配应该跨越整个字符串。正如 Andrzej 所说,您只匹配长度为 1 的字符串。
  2. 您引用了太多字符。在字符类(即[])中,您只需引用字符类中的特殊字符,即连字符、方括号、反斜杠。

以下调用对我有用:

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

Your regular expression has two problems:

  1. you insist that the match should span the entire string. As Andrzej says, you are only matching strings of length 1.
  2. you are quoting too many characters. In a character class (i.e. []), you only need to quote characters that are special within character classes, i.e. hyphen, square bracket, backslash.

The following call works for me:

preg_match('/[\\/:*?"<>|]/', "foo");  /* gives 0: does not include invalid characters */
preg_match('/[\\/:*?"<>|]/', "f<oo"); /* gives 1: does include invalid characters */
一江春梦 2024-10-06 22:16:37

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

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

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

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

As it stands at the moment, your regex will match the start of the string (^), then exactly one of the characters in the square brackets (i.e. the illegal characters), then then end of the string ($).

So this likely isn't working because a string of length > 1 will trivially fail to match the regex, and thus be considered OK.

You likely don't need the start and end anchors (the ^ and $). If you remove these, then the regex should match one of the bracketed characters occurring anywhere on the input text, which is what you want.

(Depending on the exact regex dialect, you may canonically need less backslashes within the square brackets, but they are unlikely to do any harm in any case).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文