如何检查一个字符串是否只包含拉丁字符?

4
我需要根据我显示的简单英语字符串或其他非基于拉丁字符集的语言中的字符,为标签设置不同的字体。所以我想知道整个字符串是否都是拉丁字符?我该如何在Swift中实现?我已经阅读了这个问题,但我认为我不能应用那个答案,因为没有办法一一指定所有的拉丁字符,包括标记和标点符号,来排除在检测之外。
请帮忙。谢谢。

你认为为什么不能指定所有的拉丁字符?如果你只想排除英文字母,那么集合会非常小,不到60个对象(即只有大写和小写字母)。 - Olter
我想要的可能是,有没有办法定义一个字符范围,可以涵盖所有拉丁字符(这样我就可以反转它并得到我需要的内容),而不需要逐个指定它们。 - Chen Li Yong
从这里我可以看到有可能指定一系列字符。我只是不知道如何修改答案代码以满足我的需求,指定拉丁字符集。https://dev59.com/FYzda4cB1Zd3GeqPp7Vd - Chen Li Yong
@ChenLiYong:你尝试过使用 p{Latin} 而不是 p{Han} 吗?https://dev59.com/FYzda4cB1Zd3GeqPp7Vd#31245380 - Martin R
嗯... 技术上您可以指定一系列“unichar”对象。例如,您可以将一个对象设置为unichar(45),它将从Unicode返回一个特定的对象(在这种情况下是“-”)。因此,理论上您可以创建一个要排除的对象列表(查看Unicode符号列表,拉丁字符都按顺序排列在那里)。但这是一个相当复杂的解决方案。 - Olter
显示剩余7条评论
1个回答

10
如何在Swift中检查字符串是否包含中文字符? 中类似,您可以使用正则表达式来检查是否有没有在“拉丁”字符类中的字符:not
extension String {
    var latinCharactersOnly: Bool {
        return self.range(of: "\\P{Latin}", options: .regularExpression) == nil
    }
}

"

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

"

这正是我所需要的。完美无缺。谢谢! - Baran Emre
如何判断阿拉伯语。 - Afrcvn
@Afrcvn:请尝试使用"\\P{Arabic}"而不是"\\P{Latin}" - Martin R
如果字符串中包含空格怎么办?在这种情况下,这个扩展是无用的。 - undefined
@NMaks:如果你想允许所有的“拉丁”字符和所有的空白字符,那么类似"[^\\s\\p{Latin}]"这样的表达式应该可以工作。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接