如何在Ruby正则表达式中匹配韩语字符?

时间:2012-04-13 11:31:26

标签: ruby regex unicode ruby-1.9 cjk

我对使用正则表达式的用户名进行了一些基本验证,例如[\w-_]+,我希望添加对韩语字母的支持,同时仍然保持验证相同。

我不想允许特殊字符,例如{}[]!@#$%^&*()等。我只想将\w替换为与[a-zA-Z0-9]除了匹配给定字母的内容。

这意味着안녕这样的用户名应该有效,但不是안녕[]

我需要在Ruby 1.9中这样做。

4 个答案:

答案 0 :(得分:10)

试试这个:

[가 - 힣] +

这匹配U+AC00 to U+D7A3中的每个字符,这可能足以引起您的兴趣。 (我认为你不需要旧的汉字和东西)

答案 1 :(得分:9)

您可以测试这样的无效字符:

#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.

答案 2 :(得分:3)

我认为您可以\w

替换[:word:]

/^[[:word:]\-_]+$/应该有效

答案 3 :(得分:0)

匹配无效字符是你最好的选择,因为有太多有效的韩文字符 - 它在技术上是一个字母表,但计算机化为一个字符的每个音节,另外还有成千上万的中文贷款字符(Hanja)也应该是有效的。