2012-04-13 7 views
5

Tengo algunas validaciones básicas para nombres de usuario que usan expresiones regulares, algo así como [\w-_]+, y quiero agregar compatibilidad con el alfabeto coreano, al mismo tiempo que mantengo la validación de la misma manera.¿Cómo puedo unir caracteres coreanos en una expresión regular de Ruby?

no quiero permitir caracteres especiales, como {}[][email protected]#$%^&*() etc., sólo quiero reemplazar el \w con algo que coincide con un alfabeto dado, además de [a-zA-Z0-9].

Lo que significa que el nombre de usuario como 안녕 debe ser válido, pero no 안녕[].

Necesito hacer esto en Ruby 1.9.

Respuesta

8

Puede probar para caracteres no válidos como este:

#encoding: utf-8 
def valid_name?(name) 
    !name.match(/[^a-zA-Z0-9\p{Hangul}]/) 
end 

ar = %w(안녕 name 안녕[].) 
ar.each{|name| puts "#{name} is #{valid_name?(name) ? "valid" : "invalid"}."} 
# 안녕 is valid. 
# name is valid. 
# 안녕[]. is invalid. 
+0

Vea a continuación: debe extender su expresión regular a/[^ a-zA-Z0-9 \ p {Hangul} \ p {Han}]/para capturar también nombres como 姓. Además, esta expresión regular todavía no admite nombres con guiones, como So-Young Kim. – Sprachprofi

+0

La pregunta requiere caracteres/alfabeto coreanos. Los nombres coreanos con caracteres chinos son nuevos para mí. Pero el OP se refiere a nombres de usuario, no a nombres reales, y supongo que él está estableciendo las reglas. – steenslag

+0

\ p {Han} es común en coreano, japonés y chino. Casi todos los nombres coreanos solían escribirse en Hanja y todavía son comunes en las tarjetas de visita. Son menos comunes en la red, pero es malo para las empresas decirles a las personas que su nombre de pasaporte no es un nombre válido. Ver también http://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/ – Sprachprofi

2

Creo que se puede sustituir \w por [:word:]

/^[[:word:]\-_]+$/ debería funcionar

+2

Sin embargo, eso coincidiría con TODOS los caracteres de las palabras. – gmalette

0

a juego para caracteres no válidos es su mejor opción, porque hay hay demasiados caracteres coreanos válidos, técnicamente es un alfabeto pero está computarizado como un carácter por sílaba, y además hay miles de caracteres de préstamos chinos (Han ja) que también debería ser válido.

+0

La lista es finita y se puede combinar fácilmente. Y \ p {Hangul} es un bloque de expresiones regulares válido – dda

+0

\ p {Hangul} no captura a Hanja, sin embargo, Hanja todavía se usa comúnmente para escribir nombres. Por lo menos, debes comprobar tanto \ p {Hangul} como \ p {Han}. – Sprachprofi

+1

Desafortunadamente, los caracteres chinos casi nunca se usan en coreano, incluso cuando se dicen nombres ... – dda

6

probar esto:

[가 - 힣] +

Esto coincide con todos los personajes de U+AC00 to U+D7A3, que es probablemente suficiente para su interés. (No creo que necesite caracteres Hangul antiguos y cosas así)

Cuestiones relacionadas