是否有某種方法可以檢查字符串是拉丁字母還是西裏爾字母?我試過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