我需要检测代码点是否是Elixir中的大写字母。我已经尝试检查它的值是否在65..90
范围内,但是在非拉丁大写字母上失败了。我也试过检查是否
String.upcase(cp) == cp
然而,这对非字母(即数字,标点符号)失败。
我真的不想通过整个unicode创建一个大写代码点列表,是否有内置函数?
答案 0 :(得分:15)
您可以使用\p{Lu}
Unicode字符属性regex转义序列来匹配任何大写字母:
iex(1)> "a" =~ ~r/^\p{Lu}$/u
false
iex(2)> "A" =~ ~r/^\p{Lu}$/u
true
iex(3)> "π" =~ ~r/^\p{Lu}$/u
false
iex(4)> "Π" =~ ~r/^\p{Lu}$/u
true
iex(5)> "!" =~ ~r/^\p{Lu}$/u
false
确保传递u
标志以在正则表达式中启用Unicode匹配。
您可以在this页面上找到有关支持的属性的更多信息。搜索标题" Unicode字符属性"在页面上。
答案 1 :(得分:1)
我认为你可以使用这样的东西:
<< *CODEPOINT* :: utf8 >> != String.downcase(<< *CODEPOINT* :: utf8 >>)
可能有更好的方法,但那是开始。