【发布时间】:2016-04-13 13:03:05
【问题描述】:
我如何检查字形是否是字母(或经常在单词中使用的东西,如象形文字)?
查看 Elixir 的 String 文档后,我看到的唯一方法是检查 String.downcase 和 String.upcase 是否返回相同的字符串。如果他们这样做了,那么字形就不是用在单词中的东西了。
我就是这样做的,但肯定应该有更简单的方法吗?
defmodule Words do
defp all_letters_uppercase?(string) do
String.upcase(string) == string
end
defp all_letters_downcase?(string) do
String.downcase(string) == string
end
defp contains_letter?(string) do
not (all_letters_uppercase?(string) and all_letters_downcase?(string))
end
def single_grapheme?(string) do
with graphemes = String.graphemes(string)
do
length(graphemes) == 1 and hd(graphemes) == string
end
end
@doc """
Check whether string is a single letter.
"""
def letter?(string) do
single_grapheme?(string) and contains_letter?(string)
end
end
更新:我的代码不适用于日文字母
iex(35)> Words.letter?("グ")
false
【问题讨论】:
标签: unicode internationalization elixir