匹配IRC昵称的正则表达式

6
我该如何使用正则表达式来匹配IRC昵称?如果在Ruby中进行此操作,语法可能会有所不同,但谁知道呢。
编辑:IRC昵称可以包含任何字母、数字或以下字符之一:< - [ ] \ ^ { }

Ruby使用PCRE,是吗?http://stackoverflow.com/questions/3924648/pcre-expression-for-irc-nicknames - Matt Ball
1
一个 IRC 昵称可以包含哪些字符?它们在什么位置上可以使用?你已经尝试过什么了?哪些方法没有奏效? - R. Martinho Fernandes
1
@codaddict:你是什么意思?规则是匹配任何IRC昵称。 - Mark Szymanski
@Satya:并不是所有字符都可以用于IRC昵称,我已经编辑了我的回答以包含这一信息。 - Mark Szymanski
@MartinhoFernandes:我已经编辑了我的答案,包括这些信息,至于它们可以处于什么位置:它们可以在任何地方。而且我还没有尝试过任何东西。 - Mark Szymanski
1
“任何字母”是指“拉丁字母表中的任何字母”吗? - meshy
1个回答

13
# If you are testing a single string
irc_nick_re = /\A[a-z_\-\[\]\\^{}|`][a-z0-9_\-\[\]\\^{}|`]*\z/i 

# If you are scanning them out of a larger string
irc_nick_re = /(?<=[^a-z_\-\[\]\\^{}|`])[a-z_\-\[\]\\^{}|`][a-z0-9_\-\[\]\\^{}|`]*/i 

以上允许单个字符的名称。如果需要两个字符,请将*更改为+。如果需要三个或更多字符,则将其更改为{2,},其中“2”是最少字符数减1。

如果有最大字符限制(例如,EFNet仅允许昵称长达9个字符,而Freenode允许昵称长达16个字符),则可以在逗号后包括该数字(减1)。例如:

# Validate nicknames that are between 3 and 16 characters long (inclusive)
irc_nick_re = /\A[a-z_\-\[\]\\^{}|`][a-z0-9_\-\[\]\\^{}|`]{2,15}\z/i 

3
我不知道有哪些流行的IRC网络允许在昵称中使用"<"符号。IRCnet、FreeNode、Quakenet、OFTC、Undernet和EFnet都会拒绝它。此外,你也不应该匹配昵称开头的数字,因为没有任何IRC网络允许这样做。另外,"|", "`", 和 "_"是允许的字符。而且,"\d" 应该改成 "0-9",因为只有这些数字被允许使用,而不是任何Unicode数字。 - Hinrik
@Hinrik 不错的观点!我基于 OP 的要求进行匹配,但没有针对实际实现进行测试。然而,请注意,在 Ruby 中 \d 不会匹配 Unicode 数字 - Phrogz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接