Regex &引用;stringsMatchingRegularExpression“;Swift 2中已弃用,我应该使用什么替代?
这是在Xcode 7 Beta 5上不起作用的旧函数:Regex &引用;stringsMatchingRegularExpression“;Swift 2中已弃用,我应该使用什么替代?,regex,swift2,Regex,Swift2,这是在Xcode 7 Beta 5上不起作用的旧函数: func onlyDoubleUse(textField: AnyObject){ let field = textField.object! as! UITextField let subStringArray: [String]? do { subStringArray = try field.text!.stringsMatchingRegularExpression(expression: "
func onlyDoubleUse(textField: AnyObject){
let field = textField.object! as! UITextField
let subStringArray: [String]?
do {
subStringArray = try field.text!.stringsMatchingRegularExpression(expression: "[0-9]{1,}.[0-9]{1,}|[0-9]{1,}")
} catch _ {
subStringArray = nil
}
if(subStringArray?[0] != nil){
field.text = subStringArray![0]
}else{
field.text = ""
}
}
苹果在Swift 2中删除了stringsMatchingRegularExpression
如何修复它?这里有一个递归方法,通过扩展添加到
字符串中:
extension String {
func stringsMatchingRegularExpression(expression: String) -> [String] {
if let range = self.rangeOfString(expression, options: NSStringCompareOptions.RegularExpressionSearch, range: nil, locale: nil) {
return [self[range]] + self[range.endIndex..<self.endIndex].stringsMatchingRegularExpression(expression)
}
return []
}
// if you have a large string you should use this method
func stringsMatchingRegularExpressionLarge(expression: String) -> [String] {
var result = [String]()
var currentRange = self.startIndex..<self.endIndex
// use this line in Swift 2.x instead
var currentRange = self.characters.indices
while let range = self.rangeOfString(expression, options: NSStringCompareOptions.RegularExpressionSearch, range: currentRange, locale: nil) {
result.append(self[range])
currentRange.startIndex = range.endIndex
}
return result
}
}
扩展字符串{
func stringsMatchingRegularExpression(表达式:String)->[String]{
如果let range=self.rangeOfString(表达式,选项:NSStringCompareOptions.RegularExpressionSearch,范围:nil,区域设置:nil){
返回[self[range]]+self[range.endIndex..[String]{
变量结果=[String]()
var currentRange=self.startIndex..这里有一个递归方法,通过扩展添加到String
:
extension String {
func stringsMatchingRegularExpression(expression: String) -> [String] {
if let range = self.rangeOfString(expression, options: NSStringCompareOptions.RegularExpressionSearch, range: nil, locale: nil) {
return [self[range]] + self[range.endIndex..<self.endIndex].stringsMatchingRegularExpression(expression)
}
return []
}
// if you have a large string you should use this method
func stringsMatchingRegularExpressionLarge(expression: String) -> [String] {
var result = [String]()
var currentRange = self.startIndex..<self.endIndex
// use this line in Swift 2.x instead
var currentRange = self.characters.indices
while let range = self.rangeOfString(expression, options: NSStringCompareOptions.RegularExpressionSearch, range: currentRange, locale: nil) {
result.append(self[range])
currentRange.startIndex = range.endIndex
}
return result
}
}
扩展字符串{
func stringsMatchingRegularExpression(表达式:String)->[String]{
如果let range=self.rangeOfString(表达式,选项:NSStringCompareOptions.RegularExpressionSearch,范围:nil,区域设置:nil){
返回[self[range]]+self[range.endIndex..[String]{
变量结果=[String]()
var currentRange=self.startIndex..我用你的方式修复了它,现在它可以工作了,但是我不能用“.”-doublelet subStringArray=field.text!。stringsMatchingRegularExpression(“[0-9]{1,}.[0-9]{1,}.[0-9]{1,}”)if(subStringArray.count 0){if(subStringArray[0]!=”{field text=subStringArray[0]}else{field.text=“”}}else{field.text=“”}
@bogdanov我不知道你说的“我不能用”是什么意思,-double是点。但是你的regrex中的点(“.”)应该替换为“\\”,因为这是正常的字符串“。另一个将匹配任何单个字符。Regrex:“[0-9]{1,}\.[0-9]{1,}.[0-9]{1,}”。一个改进的Regrex,其功能完全相同:“\\d+(\\.\\d+)”。当我在iPad Air 2模拟器上运行此程序并转到此字段时,我只能使用数字0-9,但我无法键入36.6”。”无法在字段上键入。我已尝试使用您的正则表达式,结果是一样的。无法使用点…我用您的方式修复了它,现在它可以工作了,但我不能使用“.”-doublelet subStringArray=field.text!.stringsMatchingRegularExpression([0-9]{1,}[0-9]{1,}”)if(subStringArray.count>0){if(subStringArray[0]!=”){field.text=subStringArray[0]}else{field.text=“”}else{field.text=“”}
@BogdanBogdanov我不知道你说的“我不能用”.-double代表double”是什么意思。但是你的regrex中的点(“.”)应该替换为“\\”因为这是一个普通的字符串“.”。另一个将匹配任何单个字符。Regrex:“[0-9]{1,}\.\.[0-9]{1,}.[0-9]{1,}”。一个改进的Regrex,它的作用完全相同:“\\d+(\\.\\d+”。当我在iPad Air 2模拟器上运行此命令并转到此字段时,我只能使用数字0-9,但我不能键入36.6”。”无法在字段中键入。我已尝试使用您的正则表达式,结果相同。无法使用点。。。