Regex &引用;stringsMatchingRegularExpression“;Swift 2中已弃用,我应该使用什么替代?

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: "

这是在Xcode 7 Beta 5上不起作用的旧函数:

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..我用你的方式修复了它,现在它可以工作了,但是我不能用“.”-double
let 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”。”无法在字段上键入。我已尝试使用您的正则表达式,结果是一样的。无法使用点…我用您的方式修复了它,现在它可以工作了,但我不能使用“.”-double
let 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”。”无法在字段中键入。我已尝试使用您的正则表达式,结果相同。无法使用点。。。