Swift 检查数字语言是否为英语或阿拉伯语/波斯语
在我的项目中,我计划将任何类型的数字语言更改为波斯语,以下是我所做的:Swift 检查数字语言是否为英语或阿拉伯语/波斯语,swift,unicode,persian,nslocale,farsi,Swift,Unicode,Persian,Nslocale,Farsi,在我的项目中,我计划将任何类型的数字语言更改为波斯语,以下是我所做的: public extension String { func perstianString (string: String)->String { let digitSet = CharacterSet.decimalDigits var finalString = String() for ch in string.unicodeScalars {
public extension String {
func perstianString (string: String)->String {
let digitSet = CharacterSet.decimalDigits
var finalString = String()
for ch in string.unicodeScalars {
if digitSet.contains(ch) {
let sh = convertoPersianNum(num: "\(ch)")
finalString += sh
}
} else {
finalString += "\(ch)"
}
}
return finalString
}
func convertoPersianNum(num: String)->String{
var retVlue = String()
var num1 = num
let number = NSNumber(value: Int(num1)!)
let numb = (num as NSString).intValue
let format = NumberFormatter()
format.locale = Locale(identifier: "fa_IR")
let faNumber = format.string(from: number)
return faNumber!
}
}
但当源值包含波斯数字时,应用程序崩溃。简单地说,我想检查它是否是波斯数字,不要做任何事情,否则请执行上面的转换:
let string = "ییسس ۱۲۳۴"
对于此类型,请不要执行任何其他操作。公共扩展字符串{
public extension String {
private var isPersian: Bool {
let predicate = NSPredicate(format: "SELF MATCHES %@", "(?s).*\\p{Arabic}.*")
return predicate.evaluate(with: self)
}
private var toPersianNum: String {
let number = NSDecimalNumber(string: self)
let formatter = NumberFormatter()
formatter.locale = Locale(identifier: "fa_IR")
return formatter.string(from: number) ?? ""
}
var persian:String {
var retVal = String()
self.enumerateSubstrings(in: startIndex..<endIndex, options: .byComposedCharacterSequences) { (string, _, _, _) in
guard let string = string else {return}
if string.isPersian {
retVal += string
}else {
retVal += string.toPersianNum
}
}
return retVal
}
}
let string = "9001ییسس2345777 ۱۲۳۴2345"
string.persian // "۹۰۰۱ییسس۲۳۴۵۷۷۷ناعدد۱۲۳۴۲۳۴۵" (result)
私有变量isPersian:Bool{
let predicate=NSPredicate(格式:“SELF MATCHES%@”,“s.*\\p{Arabic}.*”)
返回谓词.evaluate(使用:self)
}
私有变量:字符串{
let number=NSDecimalNumber(字符串:self)
let formatter=NumberFormatter()
formatter.locale=locale(标识符:“fa_IR”)
返回格式化程序.字符串(从:编号)?“”
}
波斯语:字符串{
var retVal=String()
self.EnumerateSubstring(在:startIndex..公共扩展字符串中){
私有变量isPersian:Bool{
let predicate=NSPredicate(格式:“SELF MATCHES%@”,“s.*\\p{Arabic}.*”)
返回谓词.evaluate(使用:self)
}
私有变量:字符串{
let number=NSDecimalNumber(字符串:self)
let formatter=NumberFormatter()
formatter.locale=locale(标识符:“fa_IR”)
返回格式化程序.字符串(从:编号)?“”
}
波斯语:字符串{
var retVal=String()
self.enumeratesubstring(in:startIndex。。