首页 文章

如何检查字符串中的最后3个字符是否包含Swift中的数字?

提问于
浏览
-1

对于给定的 String 实例,我想检查最后三个字符是否是数字字符( 0, 1, 2, ..., 9 ) .

例如,字符串

let str1 = "SACH092"

对于这样的查询应该返回 true ,而例如

let str2 = "SACHA92"

应该为查询返回 false .


我正在使用Xcode 7.3.1 .

5 回答

  • 1

    (正如@NiravD指出的,用于预夫特3时,使用 where 加入的多子句的条件部分 . 用于SWIFT 3,多条条件部分被简单地通过加入 , . 对于以下两种方法中,都夫特2.2和3版本包括在内)


    对数字字符使用模式匹配“0”...“9”

    Swift 2.2

    extension String {
        var lastThreeLettersAreNumbers: Bool {
            if case let chars = characters.suffix(3) where chars.count > 2 {
                let numbersPattern = Character("0")..."9"
                return chars.reduce(true) { $0 && (numbersPattern ~= $1) }
            }
            return false
        }
    }
    

    Swift 3

    extension String {
        var lastThreeLettersAreNumbers: Bool {
            if case let chars = characters.suffix(3), chars.count > 2 {
                let numbersPattern = Character("0")..."9"
                return chars.reduce(true) { $0 && (numbersPattern ~= $1) }
            }
            return false
        }
    }
    
    /* example usage, common for both Swift 2.2/3 version */
    let str1 = "SACH092"
    let str2 = "SACH0B2"
    
    print(str1.lastThreeLettersAreNumbers) // true
    print(str2.lastThreeLettersAreNumbers) // false
    

    使用flat初始化器使用nil-return Int和flatMap

    您可以利用 Int by String 初始化程序为无法表示为整数的字符串返回 nil 这一事实 .

    Swift 2.2

    extension String {
        var lastThreeLettersAreNumbers: Bool {
            if case let chars = characters.suffix(3) where chars.count > 2 {
                return chars.flatMap{Int(String($0))}.count == 3
            }
            return false
        }
    }
    

    Swift 3

    extension String {
        var lastThreeLettersAreNumbers: Bool {
            if case let chars = characters.suffix(3), chars.count > 2 {
                return chars.flatMap{Int(String($0))}.count == 3
            }
            return false
        }
    }
    
    /* example usage, common for both Swift 2.2/3 version */
    let str1 = "SACH092"
    let str2 = "SACH0B2"
    
    print(str1.lastThreeLettersAreNumbers) // true
    print(str2.lastThreeLettersAreNumbers) // false
    
  • 3

    要获得最后3个字符,

    let exampleString = "SACH092"
    let last3Char = exampleString.substringFromIndex(exampleString.endIndex.advancedBy(-3))
    

    检查last3Char是否包含所有数字,

    let badCharacters = NSCharacterSet.decimalDigitCharacterSet().invertedSet
    
    if last3Char.rangeOfCharacterFromSet(badCharacters) == nil {
        print("String contains all digits")
    } else {
        print("String contains non-digit characters")
    }
    
  • 0

    实现字符串控制的最佳方法是使用正则表达式 .

    为了你 :

    var str = "SACH092"
    let pattern = "^.*[0-9]{3,3}$"
    let regexp = try! NSRegularExpression(pattern: pattern, options: [])
    let matches = regexp.matches(in: str, options: [], range: NSMakeRange(0, str.characters.count))
    print("End with 3 numbers : \(matches.count > 0)")
    
  • 1

    你可以像这样使用

    let s : NSString = "SACH092"
    let trimmedString: String = (s as NSString).substringFromIndex(max(s.length-3,0))
        print(trimmedString.isNumeric) // return true or false
    

    //扩展字符串

    extension String {
        var isNumeric: Bool {
            let nums: Set<Character> = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
            return Set(self.characters).isSubsetOf(nums)
        }
    }
    
  • 0

    获取字符串的最后三个字母

    let oldString = "yourString"
    let newString = a.substringFromIndex(a.endIndex.advancedBy(-3))
    

    要检查这些字符是数字,

    func isNumber(num: String) -> Bool {
        let numberCharacters = NSCharacterSet.decimalDigitCharacterSet().invertedSet
        return !num.isEmpty && num.rangeOfCharacterFromSet(numberCharacters) == nil
    }
    

相关问题