美文网首页
Swift 正则表达式

Swift 正则表达式

作者: NapoleonY | 来源:发表于2020-04-19 21:43 被阅读0次
    1. 匹配输入字符串的结尾位置。要匹配 "" 字符本身,请使用 "$"
      • 修饰匹配次数为至少 1 次。要匹配 "+" 字符本身,请使用 "+"
    2. ^ 匹配输入字符串的开始位置。要匹配 "^" 字符本身,请使用 "^"
    3. \w匹配字母、数字、下划线,其中字母包括各种语言(测过中文、英文、罗马字母)
    4. [\u4e00-\u9fa5]中文的正则表达式,实际 Swfit 代码中应该为下面两种中的一种
      • [\\u4e00-\\u9fa5]:Swfit String 中\为转义符号,如果是\u,u不是特殊符号,无法转义,因此前面有两个\,表示实际的字符串是\u,而\u为正则表达式中
      • [\u{4e00}-\u{9fa5}]

    实例

    1. 基本使用
     func regulayExpression(regularExpress: String, validateString: String) -> [String] {
        do {
            let regex = try NSRegularExpression.init(pattern: regularExpress, options: [])
            let matches = regex.matches(in: validateString, options: [], range: NSRange(location: 0, length: validateString.count))
            var res: [String] = []
            for item in matches {
                let str = (validateString as NSString).substring(with: item.range)
                res.append(str)
            }
            return res
        } catch {
            return []
        }
    }
    func replace(validateStr: String, regularExpress: String, contentStr: String) -> String {
        do {
            let regrex = try NSRegularExpression.init(pattern: regularExpress, options: [])
            let modified = regrex.stringByReplacingMatches(in: validateStr, options: [], range: NSRange(location: 0, length: validateStr.count), withTemplate: contentStr)
            return modified
        } catch {
            return validateStr
        }
    }
    
    1. qq 号,仅支持数字输入,长度为5~12位数字
    let digitRegular = "^\\d{5,12}$"
    let validateStr = "9064690a"
    let diRes = regulayExpression(regularExpress: digitRegular, validateString: validateStr)
    
    1. 微信:可使用6-20个字母、数字下划线和减号,必须以字母开头、不支持设置中文
    let wechatRegular = "^[a-zA-Z][a-zA-Z\\d_-]{5,19}$"
    let wechatValidateStr = "a2345-"
    let wechatRes = regulayExpression(regularExpress: wechatRegular, validateString: wechatValidateStr)
    
    1. 昵称:最多12个字符,仅支持数字、英文、汉字。(汉字占两个字符)
      思路:由于 Swift 中 String 的长度为 characterset 的个数,因此需要先计算出字符串实际的长度,因此将字符串中的中文替换为 2 个字母
    // 中文
    let regular = "[\\u4e00-\\u9fa5]"
    // 将中文以 "aa"代替
    let tempNickName = replacRegularExpression(regularExpress: regular, validateStr: nickName, contentString: "aa")
    guard tempNickName.count <= 12 else {
        return false
    }
    
    let nickNameRegular = "^[\\da-zA-Z\\u4e00-\\u9fa5]+$"
    return regularExpression(regularExpress: nickNameRegular, validateString: nickName).count > 0
    

    CharacterSet

    简单的规则可以通过 CharacterSet 来判断
    iOS CharacterSet(字符集)简单理解

    // 判断一个字符串中是否只有数字
    let a = "12222314a".rangeOfCharacter(from: CharacterSet.decimalDigits.inverted)
    if a != nil {
      printf("不全是数字")
    }
    

    未完待续

    参考

    1. 正则表达式30分钟入门教程
    2. Swift 正则表达式完整教程
    3. 揭开正则表达式的神秘面纱
    4. NSPredicate

    相关文章

      网友评论

          本文标题:Swift 正则表达式

          本文链接:https://www.haomeiwen.com/subject/whyzmhtx.html