我试图确定字符串的物理像素宽度。
例如:
FONT_SIZE = 10
str="123456789"
width = str.length * FONT_SIZE # which will be 9 * 10 = 90px
问题:但对于中国人,日本人或韩国人:
FONT_SIZE = 10
str="一二三四五六七八九"
width = str.length * FONT_SIZE # this still result in 90 (9*10)
但它真的应该是180,因为它们是每个字符的2个字符。
如何制作此功能(返回true / false)?
def is_wide_char char
#how to?
end
class String
def wlength
l = 0
self.each{|c| is_wide_char(c)? l+=2: l+=1}
l
end
end
答案 0 :(得分:1)
How can I detect CJK characters in a string in Ruby?给出答案
class String
def contains_cjk?
!!(self =~ /\p{Han}|\p{Katakana}|\p{Hiragana}\p{Hangul}/)
end
end
strings= ['日本', '광고 프로그램', '艾弗森将退出篮坛', 'Watashi ha bakana gaijin desu.']
strings.each{|s| puts s.contains_cjk?}
#true
#true
#true
#false