2012-04-13 15 views
5

Ho alcune convalide di base per nomi utente che usano espressioni regolari, qualcosa come [\w-_]+, e voglio aggiungere il supporto per l'alfabeto coreano, mantenendo comunque la stessa validazione.Come posso abbinare i caratteri coreani in un'espressione regolare Ruby?

Non voglio permettere caratteri speciali, come ad esempio {}[][email protected]#$%^&*() ecc, voglio solo sostituire il \w con qualcosa che corrisponde a un dato alfabeto in aggiunta a [a-zA-Z0-9].

Il che significa che nome utente come 안녕 deve essere valido, ma non 안녕[].

Ho bisogno di farlo in Ruby 1.9.

risposta

8

È possibile verificare i caratteri non validi come questo:

#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

Vedi sotto - dovresti estendere la tua espressione regolare a/[^ a-zA-Z0-9 \ p {Hangul} \ p {Han}]/per catturare anche nomi come 姓. Inoltre, questa regex non supporta ancora i nomi con trattini, come So-Young Kim. – Sprachprofi

+0

La domanda richiede carattere/alfabeto coreano. I nomi coreani con caratteri cinesi sono nuovi per me. Ma l'OP si riferisce ai nomi utente, non ai nomi reali, e suppongo che stia impostando le regole. – steenslag

+0

\ p {Han} è comune in coreano, giapponese e cinese. Quasi tutti i nomi coreani erano scritti in Hanja e sono ancora comuni sui biglietti da visita. Sono meno comuni in rete, ma è sbagliato per le imprese dire alla gente che il nome del passaporto non è un nome valido. Vedi anche http://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/ – Sprachprofi

2

Penso che si possa sostituire \w da [:word:]

/^[[:word:]\-_]+$/ dovrebbe funzionare

+2

Tuttavia, ciò corrisponderebbe a TUTTI i caratteri di parole. – gmalette

0

corrispondenza per i caratteri non validi è la scelta migliore, perché ci sono troppi validi caratteri coreani - è tecnicamente un alfabeto ma è computerizzato come un carattere per sillaba, e inoltre ci sono migliaia di caratteri di prestito cinesi (Han ja) che dovrebbe anche essere valido.

+0

L'elenco è finito e facilmente abbinabile. E \ p {Hangul} è un blocco di espressioni regolari valido – dda

+0

\ p {Hangul} non cattura Hanja, tuttavia Hanja è ancora comunemente usato per scrivere nomi. Per lo meno devi controllare sia per \ p {Hangul} che per \ p {Han}. – Sprachprofi

+1

Purtroppo i caratteri cinesi non vengono quasi mai più usati in coreano, anche quando si affermano nomi ... – dda

6

provare questo:

[가 - 힣] +

Questo corrisponde ogni personaggio da U+AC00 to U+D7A3, che è probabilmente sufficiente per il vostro interesse. (Non penso che avrai bisogno di caratteri e roba vecchi)

Problemi correlati