查找Elixir中的代码点是否为大写

时间:2016-05-01 13:02:59

标签: elixir

我需要检测代码点是否是Elixir中的大写字母。我已经尝试检查它的值是否在65..90范围内,但是在非拉丁大写字母上失败了。我也试过检查是否

String.upcase(cp) == cp

然而,这对非字母(即数字,标点符号)失败。

我真的不想通过整个unicode创建一个大写代码点列表,是否有内置函数?

2 个答案:

答案 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 >>)

可能有更好的方法,但那是开始。