Grafiğin bir harf mi (veya hiyeroglif gibi sıklıkla kullanılan bir şey) olup olmadığını nasıl kontrol ederim?Grafeme bir mektup olup olmadığını nasıl kontrol edilir?
Elixir'in String
belgelerine baktıktan sonra, görebildiğim tek yol, String.downcase
ve String.upcase
'un aynı dizgeyi döndürüp döndürmediğini kontrol etmektir. Yaparlarsa, o zaman grafik sözcüklerde kullanılan bir şey değildir.
Nasıl yaparım, ama kesinlikle daha basit bir yol olmalı?
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
Güncelleme: kodum japon harflerle
iex(35)> Words.letter?("グ")
false
Sadece benim 2 ¢: Eğer bütün girişi, '\ A' (dize başlangıcı) kullanabilir dizesi ve' \ z' eşleştirmek istiyorsanız (dize sonu) çapalar. Ben '^' (satırın başlangıcı) artı '$' (satır sonu) artı niyetini daha açık bir şekilde ifade etmek için 'f' (birinci satır) değiştiricisini buluyorum. –
@PatrickOscity ilginç, bu çapaların olduğunu bile bilmiyordum. Nedense herkes ve köpeği '^' ve '$' kullanmaktadır. – CrabMan
Bu, bir harf ve bir birleştirme karakteri içeren çoklu kod noktası grafikleriyle eşleşmiyor gibi görünmektedir. 'Words.letter? (" G̈ ") # => false' sorudaki kodunuz doğru olduğunda. – Dogbert