2011-03-02 18 views
5

Bir IRC takma isimle eşleştirmek için normal ifadeleri nasıl kullanırım? Bu, Ruby'de bir fark yaratıyorsa (büyük ihtimalle normal ifadenin sözdizimiyle birlikte olacak, fakat kim bilir.)IRC takma adıyla eşleşecek düzenli ifade

DÜZENLEME: Bir IRC takma adı, herhangi bir harf, sayı veya aşağıdaki karakterlerden herhangi birini içerebilir. : < - [ ] \^ { }

+2

kuralları nedir? – codaddict

+0

Ruby, PCRE kullanıyor, değil mi? http://stackoverflow.com/questions/3924648/pcre-expression-for-irc-nicknames –

+1

IRC takma adı ne olabilir ve olamaz? Hangi pozisyonlarda? Şimdiye kadar ne denediniz? Ne işe yaramadı? –

cevap

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 

yukarıda tek karakter isimlerini verir. İki karakter gerekiyorsa, *'u + olarak değiştirin. Üç karakter (veya daha fazla) gerekiyorsa, {2,} olarak değiştirin, burada '2' eksi 1 karakterlerin minimum sayısıdır.

Maksimum sayıda karakter varsa (örneğin, EFNet yalnızca takma adlara izin verir) 9 karakter yalnız, Freenode ise 16 karakter uzunluğuna kadar izin verir) sonra virgülden sonra bu sayıyı (eksi 1) ekleyebilirsiniz. Örneğin:

# 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

Takma adlarda "<" yazan herhangi bir popüler IRC ağı bilmiyorum. IRCnet, FreeNode, Quakenet, OFTC, Undernet ve EFnet hepsi reddeder. Ayrıca, IRC ağı buna izin vermediğinden takma adın başında bir rakamla eşleşmemelisiniz. Ayrıca, izin verilen "|", "' "ve" _ "eksiksiniz. Ve "\ d" yerine "0-9" olmalıdır, çünkü bunlar izin verilen tek rakamlar, herhangi bir Unicode basamağı değildir. – Hinrik

+0

@Hinrik Harika puan! OP'nin gerekliliklerine göre eşleşiyordum, ama gerçek dünya uygulamalarına karşı test etmiyordum. Ancak, ['\ d' Ruby'de Unicode basamakları ile eşleşmediğini unutmayın] (http://stackoverflow.com/questions/6998713/scanning-for-unicode-numbers-in-a-string-with-d). – Phrogz