美文网首页
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