2012-04-13 58 views
5

Tôi có một số xác thực cơ bản cho tên người dùng bằng cách sử dụng cụm từ thông dụng, chẳng hạn như [\w-_]+ và tôi muốn thêm hỗ trợ cho bảng chữ cái tiếng Hàn, trong khi vẫn giữ nguyên xác thực.Tôi làm cách nào để khớp các ký tự tiếng Hàn trong biểu thức chính quy Ruby?

Tôi không muốn cho phép các ký tự đặc biệt, chẳng hạn như {}[][email protected]#$%^&*() v.v., tôi chỉ muốn thay thế \w bằng thứ gì đó khớp với một bảng chữ cái đã cho ngoài số [a-zA-Z0-9].

Điều đó có nghĩa là tên người dùng như 안녕 phải hợp lệ, nhưng không phải là 안녕[].

Tôi cần thực hiện việc này trong Ruby 1.9.

Trả lời

8

Bạn có thể kiểm tra cho các ký tự không hợp lệ như thế này:

#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

Xem bên dưới - bạn nên mở rộng regex sang/[^ a-zA-Z0-9 \ p {Hangul} \ p {Han}]/để cũng có thể chụp các tên như 姓. Ngoài ra, regex này vẫn không hỗ trợ tên với dấu gạch ngang trong chúng, như So-Young Kim. – Sprachprofi

+0

Câu hỏi yêu cầu ký tự/bảng chữ cái Hàn Quốc. Tên Hàn Quốc với các ký tự Trung Quốc là mới đối với tôi. Nhưng OP đề cập đến tên người dùng, không phải tên thật, và tôi đoán anh ta đang thiết lập các quy tắc. – steenslag

+0

\ p {Han} phổ biến với tiếng Hàn, tiếng Nhật và tiếng Trung. Hầu như tất cả các tên Hàn Quốc được sử dụng để viết trong Hanja và họ vẫn còn phổ biến trên danh thiếp. Chúng ít phổ biến hơn trên mạng, nhưng không tốt cho doanh nghiệp khi nói với mọi người rằng tên hộ chiếu của họ không phải là tên hợp lệ. Xem thêm http://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/ – Sprachprofi

2

Tôi nghĩ rằng bạn có thể thay thế \w bởi [:word:]

/^[[:word:]\-_]+$/ nên làm việc

+2

Tuy nhiên, điều đó sẽ khớp với TẤT CẢ ký tự từ. – gmalette

0

Matching cho các ký tự không hợp lệ là lựa chọn tốt nhất của bạn, bởi vì có là quá nhiều ký tự Hàn Quốc hợp lệ - đó là một bảng chữ cái nhưng được vi tính hóa thành một ký tự cho mỗi âm tiết, và thêm vào đó là hàng nghìn ký tự cho vay của Trung Quốc (Han ja) cũng phải hợp lệ.

+0

Danh sách này hữu hạn và dễ dàng khớp. Và \ p {Hangul} là một khối regex hợp lệ – dda

+0

\ p {Hangul} không chụp được Hanja, nhưng Hanja vẫn thường được sử dụng để viết tên. Ít nhất bạn phải kiểm tra cả \ p {Hangul} và \ p {Han}. – Sprachprofi

+1

Thật không may nhân vật Trung Quốc hầu như không bao giờ được sử dụng nữa bằng tiếng Hàn, ngay cả khi nói tên ... – dda

6

thử điều này:

[가 - 힣] +

này phù hợp với tất cả các nhân vật từ U+AC00 to U+D7A3, mà có lẽ là đủ cho sự quan tâm của bạn. (Tôi không nghĩ rằng bạn sẽ cần các ký tự và vật dụng treo cổ cũ)

Các vấn đề liên quan