gpt4 book ai didi

regex - 转换来自任何语言的数字字符串,同时保留前导零

转载 作者:搜寻专家 更新时间:2023-11-01 07:17:58 33 4
gpt4 key购买 nike

我有一个阿拉伯语的数字字符串,我想把它转换成英语,我用这个:

let arabicPhoneNumber = "٠١٠١٢٣٤٥٦٧٨٩"
let formatter = NumberFormatter()
formatter.locale = Locale(identifier: "EN")
if let number = formatter.number(from: arabicPhoneNumber)?.stringValue {
print(number) //deletes leading zero
}

问题是它删除了前导零,我想保留它,因为这是一个电话号码。有没有办法在不丢失前导零的情况下将电话号码字符串从阿拉伯语转换为英语??

最佳答案

您可以使用 Foundation 库中的 CFStringTransform() 对拉丁脚本进行“音译”,而不是将字符串转换为数字:

let arabicPhoneNumber = "٠١٠١٢٣٤٥٦٧٨٩"

// We need a CFMutableString and a CFRange:
let cfstr = NSMutableString(string: arabicPhoneNumber) as CFMutableString
var range = CFRange(location: 0, length: CFStringGetLength(cfstr))

// Do the transliteration (this mutates `cfstr`):
CFStringTransform(cfstr, &range, kCFStringTransformToLatin, false)

// Convert result back to a Swift string:
let phoneNumber = cfstr as String

print(phoneNumber) // 010123456789

这会保留所有数字以及可能的分隔符。

备注:上面的示例(来自问题)包含“Arabic Indic”数字,例如 ١ = U+0661 = "ARABIC-INDIC DIGIT ONE"。这些在 macOS 10.12 和 iOS 10 上正确音译。

在较早的操作系统版本上,

CFStringTransform(cfstr, &range, kCFStringTransformLatinArabic, true)
CFStringTransform(cfstr, &range, kCFStringTransformStripCombiningMarks, false)

在我的测试中正确地将阿拉伯数字转换为拉丁数字。

关于regex - 转换来自任何语言的数字字符串,同时保留前导零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40893123/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com