8

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

我不想允许特殊字符,例如{}[]!@#$%^&*()等,我只想\w用与给定字母表匹配的东西替换[a-zA-Z0-9].

这意味着 username like안녕应该是有效的,但不是안녕[].

我需要在 Ruby 1.9 中执行此操作。

4

4 回答 4

16

试试这个:

[가-힣]+

这匹配从U+AC00 到 U+D7A3 的每个字符,这可能足以满足您的兴趣。(我认为你不需要旧的韩文字符和东西)

于 2014-02-21T10:45:45.180 回答
11

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

#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.
于 2012-04-13T12:47:56.400 回答
3

我认为你可以替换\w[:word:]

/^[[:word:]\-_]+$/应该管用

于 2012-04-13T11:45:24.717 回答
0

匹配无效字符是您的最佳选择,因为有效的韩语字符太多了 - 从技术上讲,它是一个字母表,但计算机化为每个音节一个字符,此外还有数千个中文借用字符(汉字)也应该是有效的。

于 2012-04-14T11:51:06.403 回答