是否有某种方法可以检查字符串是拉丁字母还是西里尔字母?我试过localizedCompare
字符串方法,但它没有给我需要的结果。检查字符串是拉丁字母还是西里尔文
回答
这样的事情呢?
extension String {
var isLatin: Bool {
let upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
let lower = "abcdefghijklmnopqrstuvwxyz"
for c in self.characters.map({ String($0) }) {
if !upper.containsString(c) && !lower.containsString(c) {
return false
}
}
return true
}
var isCyrillic: Bool {
let upper = "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЮЯ"
let lower = "абвгдежзийклмнопрстуфхцчшщьюя"
for c in self.characters.map({ String($0) }) {
if !upper.containsString(c) && !lower.containsString(c) {
return false
}
}
return true
}
var isBothLatinAndCyrillic: Bool {
return self.isLatin && self.isCyrillic
}
}
使用:
let s = "Hello"
if s.isLatin && !s.isBothLatinAndCyrillic {
// String is latin
} else if s.isCyrillic && !s.isBothLatinAndCyrillic {
// String is cyrillic
} else if s.isBothLatinAndCyrillic {
// String can be either latin or cyrillic
} else {
// String is not latin nor cyrillic
}
Considere存在这样的情况给定的字符串可能是两个,例如字符串:
let s = "A"
既可以是拉丁或西里尔。所以这就是为什么有“是两个”的功能。
而且它也可以是没有人:
let s = "*"
这不是一个好的解决方案。至少对于IOS 11.请检查https:// stackoverflow。com/questions/47890747/how-to-detect-text-string-language-in-ios/47890753#47890753 –
iOS 11在2016年不存在:) –
是的。我为任何寻找类似解决方案的人添加了这一点。 –
你应该得到所有Unicode字符,并检测是否包含基于Unicode值斯拉夫字符或拉丁字符。此代码不完整,您可以完成它。
let a : String = "ӿ" //unicode value = 04FF
let scalars = a.unicodeScalars
//get unicode value of first char:
let unicodeValue = scalars[scalars.startIndex].value //print 1279, correspondant to 04FF.
在这里检查所有的unicode值(以十六进制)。 http://jrgraphix.net/r/Unicode/0400-04FF
根据这个网站,西里尔值从0400 - > 04FF(1024 - > 1279)
这是西里尔检查代码:
var isCyrillic = true
for (index, unicode) in scalars.enumerate() {
if (unicode.value < 1024 || unicode.value > 1279) {
print("not a cyrillic text")
print(unicode.value)
isCyrillic = false
break
}
}
出人意料的是,有没有简单的答案对你的问题。拉丁字母不仅包含A - Z,还有法语的重音字符和德语的古体形式等。我不知道西里尔字母,所以我会放弃它。最重要的是,你必须处理:标点符号(.,?"()
等)和白色空间,表情符号,箭头,丁字裤...这是语言中立。取决于您的要求,复杂性可能会很快升级。
您接受的答案不足以说明:,因为它不涉及空格。
访问网站like this one以了解哪些范围包含哪些语言的字符并使用下面的代码进行播放。这不是一个完整的答案,但意思是让你开始:
let neutralRanges = [0x20...0x40]
let latinRanges = [0x41...0x5A, 0x61...0x7A, 0xC0...0xFF, 0x100...0x17F]
let cyrillicRanges = [0x400...0x4FF, 0x500...0x52F]
func scalar(scalar: UnicodeScalar, isInRanges ranges: [Range<Int>]) -> Bool {
for r in ranges {
if r ~= Int(scalar.value) {
return true
}
}
return false
}
let str = "Hello world"
var isLatin = true
var isCyrillic = true
for s in "Hello world".unicodeScalars {
if scalar(s, isInRanges: neutralRanges) {
continue
}
else if !scalar(s, isInRanges: latinRanges) {
isLatin = false
}
else if !scalar(s, isInRanges: cyrillicRanges) {
isCyrillic = false
}
}
print(isLatin)
print(isCyrillic)
斯威夫特3: 对于波斯语和阿拉伯语
extension String {
var isFarsi: Bool {
//Remove extra spaces from the first and last word
let value = self.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)
if value == "" {
return false
}
let farsiLetters = "آ ا ب پ ت ث ج چ ح خ د ذ ر ز ژ س ش ص ض ط ظ ع غ ف ق ک گ ل م ی ن و ه"
let arabicLetters = " ء ا أ إ ء ؤ ئـ ئ آ اً ة ا ب ت ث ج ح خ د ذ ر ز س ش ص ض ط ظ ع غ ف ق ك ل م ن ه و ي"
for c in value.characters.map({ String($0) }) {
if !farsiLetters.contains(c) && !arabicLetters.contains(c) {
return false
}
}
return true
}
}
- 1. PHP的正则表达式检查字符串是拉丁文还是西里尔文
- 2. libGdx - 西里尔字母和拉丁字符的不同字体
- 3. 处理西里尔字母代替拉丁字符
- 4. 将西里尔文字母替换为拉丁文
- 5. 字母转换 - 西里尔文到拉丁文
- 6. Antlr4匹配西里尔字母,拉丁字母,波兰字母和希腊字母以及特殊字符?
- 7. 西里尔字母符号
- 8. 检查字符是拉丁字母的一部分吗?
- 9. 如何在Java中检测字符串是否包含西里尔字母?
- 10. 的preg_match分不清拉丁和西里尔字母
- 11. 更改几个拉丁字母西里尔
- 12. Zend_Controller_Router_Route_Regex不匹配拉丁,但只有西里尔字母
- 13. 检查字符串是否只包含拉丁字符?
- 14. Visual C++调试输出显示????非拉丁字符(西里尔字母)
- 15. 西里尔字母
- 16. XCode,字符串编码,西里尔文字母
- 17. 如何将俄文字符串转换为西里尔字母?
- 18. 从字符串中提取西里尔文字母
- 19. 检查varible是字符串还是int
- 20. 如何检查字符是字母还是数字?
- 21. 从拉丁字符得到西里尔结果
- 22. 西里尔字母域名
- 23. 西里尔字母和PHPWord
- 24. 如何音译西里尔以拉丁文字
- 25. 如何转换俄语西里尔字母的字符串?
- 26. 检查一个字符是整数还是字母
- 27. 如何包含2种塞尔维亚语言的变体?用拉丁字母和用西里尔字母
- 28. 西里尔文字母为“???” - php
- 29. ASIHTTPRequest和西里尔文字母
- 30. 如何找出字符串中的第一个字符是否是拉丁字母的字母
你的意思是,如果一个字符串包含*仅拉丁语*或*仅西里尔·人物?因为一个字符串可以包含两个字符(加上一些其他字符,如希腊语,中文,阿拉伯语,希伯来语...) –
所有字符串或至少是字符。 – Ookey
如果两者都不存在或两者兼而有之? – Alexander