2011-03-02 27 views
5

如何使用正則表達式來匹配IRC暱稱?這是在Ruby中完成,如果這有所作爲(它可能會與正則表達式的語法,但誰知道)。正則表達式以匹配IRC暱稱

編輯:一個IRC暱稱可以包含任何字母,數字或任何以下字符:< - [ ] \^ { }

+2

什麼是規則? – codaddict 2011-03-02 04:07:10

+0

Ruby使用PCRE,不是嗎? http://stackoverflow.com/questions/3924648/pcre-expression-for-irc-nnamenames – 2011-03-02 04:07:32

+1

什麼可以和不可以在IRC暱稱?在什麼位置?你試過什麼了?什麼沒有用? – 2011-03-02 04:08:37

回答

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 2011-04-27 22:45:59

+0

@Hinrik很棒的一點!我基於OP的要求進行匹配,但不是針對真實世界的實現進行測試。但是,請注意['\ d'與Ruby中的Unicode數字不匹配](http://stackoverflow.com/questions/6998713/scanning-for-unicode-numbers-in-a-string-with-d)。 – Phrogz 2011-08-10 02:59:43