【问题标题】:How can I check if a string contains only latin characters?如何检查字符串是否仅包含拉丁字符?
【发布时间】:2017-12-16 13:15:28
【问题描述】:

我需要为标签设置不同的字体,具体取决于我是显示简单的英文字符串还是显示不基于拉丁字符集的其他语言的字符。所以我只想知道整个字符串是否都是拉丁字符?我怎样才能在 Swift 中做到这一点?我已阅读此question,但我认为我无法应用该答案,因为我无法一一指定要在检测中排除的所有拉丁字符,包括标记和标点符号。

请帮忙。谢谢。

【问题讨论】:

  • 您认为为什么不能指定所有拉丁字符?如果您只想排除英文字母,则集合将相当小,少于 60 个对象(即仅大写和小写字母)。
  • 但是点呢?逗号?分号?和号?以及我的键盘没有列出的所有符号?并且强调的字母(例如:á)仍然被认为是拉丁文,因为它仍然可以使用字体正确呈现。
  • 您到底在寻找什么角色?你认为 á 是不是一个普通的角色? Œ呢?您是在寻找“英语中使用的字符”还是一些“拉丁字符集”或“您的字体可以代表的字符”?
  • 请注意,Unicode 是编码所有个可能字符的标准,因此询问字符串是否“至少包含一个 Unicode 字符”是没有意义的。
  • 是的,就我而言,我认为它是一个普通的(或基于拉丁语的)字符。我需要打印的字符串有时可以有中文或缅甸文或日文或其他任何内容,当字符串包含中文或缅甸文或日文或其他不基于拉丁字符的语言时,我需要使用不同的字体。但如果不可能,那么我想我可以将 á 分组为非普通字符大小写。

标签: swift string unicode


【解决方案1】:

类似于How can I check if a string contains Chinese in Swift?, 您可以使用正则表达式来检查是否没有字符 不是在“拉丁”字符类中:

extension String {
    var latinCharactersOnly: Bool {
        return self.range(of: "\\P{Latin}", options: .regularExpression) == nil
    }
}

\P{Latin}(大写“P”)是匹配任何具有“Latin”Unicode 字符属性的字符的模式。

【讨论】:

  • 这是我需要的。完美的。谢谢!
猜你喜欢
  • 2010-12-27
  • 2016-05-19
  • 2012-11-20
  • 1970-01-01
  • 2018-09-03
  • 2010-12-19
  • 1970-01-01
  • 2011-04-04
相关资源
最近更新 更多