【问题标题】:Check if a character is Russian检查字符是否为俄语
【发布时间】:2017-06-27 20:30:42
【问题描述】:

我想知道一个字符串是否包含俄语/西里尔字符。

对于拉丁字符,我会这样做(伪代码):

text := "test"
for _, r := range []rune(text) {
    if r >= 'a' && r <= 'z' {
        return True
    }
}
return False

俄语/西里尔字母对应的方法是什么?

【问题讨论】:

  • 您是否尝试仅使用 Unicode 图表(我假设您的输入是 unicode),例如 link?只需遍历您感兴趣的任何值。

标签: go unicode cyrillic


【解决方案1】:

这似乎有效

unicode.Is(unicode.Cyrillic, r) // r is a rune

【讨论】:

  • 这是要走的路。它可以捕捉所有的西里尔字符,包括像 ᴫ U+01D2B 这样的古怪字符,以及 U+0A640 和 U+00460 的巨大范围。
【解决方案2】:

我继续并根据this Unicode chart 做了这个示例实现来查找俄语大写字符:

func isRussianUpper(text string) bool {
    for _, r := range []rune(text) {
        if r < '\u0410' || r > '\u042F' {
            return false
        }
    }
    return true
}

您可以通过这种方式制作任何字符集。只需修改您感兴趣的字符代码即可。

【讨论】:

  • 谢谢,俄语字母表中的一些字母看起来像拉丁字母(如 o 或 A),所以我想我必须做一些更复杂的事情
  • 请注意,有许多西里尔字符超出该范围。 U+00460 有更多(上下交替),U+01D2B 有一个,U+0A640 有更多。并且可以添加更多。 Avoid hard coding ranges, use unicode.Is(unicode.Cyrillic, r) instead。要区分大小写,请使用unicode.IsUpperunicode.IsLower,记住有些字符是both,有些不是neither
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多