2012-04-13 35 views
5

我對使用正則表達式的用戶名有一些基本的驗證,例如[\w-_]+,我想添加對韓文字母的支持,同時仍然保持驗證相同。如何在Ruby正則表達式中匹配韓文字符?

我不希望允許特殊字符,例如{}[][email protected]#$%^&*()等,我只是想用[a-zA-Z0-9]以外的某個字母替換\w

這意味着像안녕這樣的用戶名應該有效,但不是안녕[]

我需要在Ruby 1.9中做到這一點。

回答

8

可以測試無效字符是這樣的:

#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

請參閱下文 - 您應該將正則表達式擴展到/ [^ a-zA-Z0-9 \ p {Hangul} \ p {Han}] /以便還可以捕獲像姓一樣的名字。另外,這個正則表達式仍然不支持虛線中的名字,比如So-Young Kim。 – Sprachprofi 2012-05-29 08:30:19

+0

問題要求韓文字母/字母。帶有漢字的韓文名字對我來說是新的。但是OP指的是用戶名,而不是實名,我猜他正在制定規則。 – steenslag 2012-05-29 18:46:50

+0

\ p {韓}常見於韓國,日本和中國人。幾乎所有的韓文名字都是用漢字書寫的,在名片上依然很常見。他們在網絡上不太常見,但是告訴人們他們的護照名稱不是一個有效的名字對企業來說是不好的。另見http://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/ – Sprachprofi 2012-05-30 06:47:08

2

我想你可以通過[:word:]

/^[[:word:]\-_]+$/更換\w應該工作

+2

但是,這將匹配所有單詞字符。 – gmalette 2012-04-13 11:56:04

0

匹配的無效字符是最好的選擇,因爲有有太多有效的韓語字符 - 它在技術上是一個字母表,但是被計算機化爲每個音節一個字符,此外還有成千上萬的中國貸款字符(韓ja)這也應該是有效的。

+0

該列表是有限的,並且很容易匹配。並且\ p {Hangul}是一個有效的正則表達式塊 – dda 2012-05-21 13:02:11

+0

\ p {Hangul}不會捕獲Hanja,但Hanja仍然常用來寫名字。至少你必須檢查\ p {Hangul}和\ p {Han}。 – Sprachprofi 2012-05-22 08:37:11

+1

不幸的是,韓文幾乎不再使用中文字符,即使在說明名字時也是如此...... – dda 2012-05-22 08:38:14

6

試試這個:

[가 - 힣] +

這從U+AC00 to U+D7A3每一個角色,這大概是足以讓你的興趣相匹配。 (我不認爲你會需要舊的韓文字符和東西)