从任何语言转换数字字符串,同时保留前导零

时间:2016-11-30 16:17:11

标签: regex swift string localization

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

in sequence

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

2 个答案:

答案 0 :(得分:1)

您可以执行"音译"而不是将字符串转换为数字。到拉丁文脚本,使用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上正确音译的。

在早期的OS版本中,

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

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

答案 1 :(得分:1)

swift 4.0

fn <- basename("https://www.example.com/apples/pears/blah.csv")
gsub("\\..*$", "", fn)