【发布时间】:2018-04-28 05:56:29
【问题描述】:
我正在尝试编写一个函数,如果它是有效的比特币地址,则返回 true 或 false。
我目前有一个二维码扫描仪,它返回如下字符串:
比特币:18YCdhPsd5gdf6WD4ioMZZJKTNdajUJyTM
这是我的功能:
func isValidBitcoinAddress() -> Bool {
var fullAddress = self.components(separatedBy: ":")
let r = fullAddress[1].startIndex..<fullAddress[1].endIndex
let pattern = "^[13][a-km-zA-HJ-NP-Z1-9]{25,34}$"
let r2 = self.range(of: pattern, options: .regularExpression)
if r2 == r {
return true
} else {
return false
}
}
不幸的是,这每次都返回 false。
我从这个网站获得了 RegEx 模式:http://mokagio.github.io/tech-journal/2014/11/21/regex-bitcoin.html
Swift 中的格式可能不同吗?
谢谢!
【问题讨论】:
-
fullAddress[1].startIndex..<fullAddress[1].endIndex->fullAddress[1].indices -
这似乎是一个弱类型。与其将方法添加到
isValidBitcoinAddress到String,不如考虑创建一个名为BitcoinAddress的结构,它包装String,并提供一个可失败的初始化程序,如果提供给它的字符串是有效地址,则该初始化程序成功。从那里开始,您的应用程序只能使用BitcoinAddress实例,并且可以确定它们是有效地址,而不是使用字符串并且必须一直检查。 -
感谢您的提示!