如何檢查字形是否是字母(或者像文字中常用的象形文字)?如何檢查字形是否是字母?
查看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
只是我的2¢:如果你想匹配你也可以使用'\ A'(字符串的開頭)的整個輸入字符串和'\ z' (字符串的結尾)錨。我發現'^'(行首)加上'$'(行結尾)加上'f'(第一行)修飾符以更清楚地表達意圖。 –
@PatrickOscity有趣,我甚至不知道那些錨點存在。出於某種原因,每個人和他們的狗都使用'^'和'$'。 – CrabMan
這似乎不匹配包含字母和組合字符的多碼點字形,例如, 'Words.letter?(「g̈」)#=> false',而您的問題中的代碼返回true。 – Dogbert