2011-03-02 21 views
5

¿Cómo usaría una expresión regular para que coincida con un apodo IRC? Esto se está haciendo en Ruby si hace una diferencia (probablemente lo hará, con la sintaxis de la expresión regular, pero quién sabe).Expresión regular para coincidir con el apodo IRC

EDITAR: Un apodo de IRC puede contener cualquier letra, número o cualquiera de los siguientes caracteres : < - [ ] \^ { }

+2

¿Cuáles son las reglas? – codaddict

+0

Ruby usa PCRE, ¿no es así? http://stackoverflow.com/questions/3924648/pcre-expression-for-irc-nicknames –

+1

¿Qué puede y qué no puede ser en un sobrenombre de IRC? En que posiciones? ¿Qué has intentado hasta ahora? ¿Qué no funcionó? –

Respuesta

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 

Lo anterior permite que los nombres de un solo carácter. Si se requieren dos caracteres, cambie * a +. Si se requieren tres caracteres (o más), cámbielo a {2,}, donde '2' es el número mínimo de caracteres menos 1.

Si hay un número máximo de caracteres (por ejemplo, EFNet solo permite alias hasta 9 caracteres en solitario, mientras que Freenode permite cortes de hasta 16 caracteres), entonces puede incluir ese número (menos 1) después de la coma. Por ejemplo:

# 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

No conozco ninguna red de IRC popular que permita "<" en apodos. IRCnet, FreeNode, Quakenet, OFTC, Undernet y EFnet todos lo rechazan. Además, no debe coincidir con un dígito al comienzo del sobrenombre, ya que ninguna red IRC lo permite. Además, te faltan "|", "' "y" _ ", que están permitidos. Y el "\ d" debería ser "0-9" en su lugar, ya que esos son los únicos dígitos permitidos, no cualquier dígito Unicode. – Hinrik

+0

@Hinrik ¡Grandes puntos! Estaba haciendo coincidir según los requisitos del OP, pero no con las implementaciones del mundo real. Sin embargo, tenga en cuenta que ['\ d' no coincide con los dígitos Unicode en Ruby] (http://stackoverflow.com/questions/6998713/scanning-for-unicode-numbers-in-a-string-with-d). – Phrogz

Cuestiones relacionadas