iOS CharacterSet(字符集)简单理解

通常我们在一些场景下会用到一个字符串是否包含某种特定字符,比如判断密码是否只包含数字,检查url是否有不规范字符,删除多余空格等操作

CharacterSet简单描述


CharacterSet是在Foundation框架下的一个结构体,用于搜索操作的一组Unicode字符值。

概述 字符集表示一组符合unicode的字符。基础类型使用字符集将字符组合在一起进行搜索操作,以便在搜索期间可以找到任何特定的字符集。 这种类型提供了“写时复制”的行为,并且还连接到Objective-C NSCharacterSet类。

自己的话总结,就是将unicode字符,按组分类,便于搜索查找,验证字符串。 下面是简单分组总结:

属性

描述

CharacterSet.alphanumerics

字母和数字的组合,包含大小写, 不包含小数点

CharacterSet.capitalizedLetters

字母,首字母大写,Lt类别

CharacterSet.decimalDigits

0-9的数字,也不包含小数点

CharacterSet.whitespaces

空格

CharacterSet.whitespacesAndNewlines

空格和换行

CharacterSet.letters

所有英文字母,包含大小写 65-90 97-122

CharacterSet.lowercaseLetters

小写英文字母 97-122

CharacterSet.uppercaseLetters

大写英文字母 65-90

CharacterSet.nonBaseCharacters

非基础字符 M*

CharacterSet.illegalCharacters

不合规字符,没有在Unicode 3.2 标准中定义的字符

CharacterSet.punctuationCharacters

标点符号,连接线,引号什么的 P*

CharacterSet.symbols

符号,包含S* 所有内容,运算符,货币符号什么的

CharacterSet.newlines

返回一个包含换行符的字符集,U+000A ~ U+000D, U+0085, U+2028, and U+2029

CharacterSet.symbols

符号,包含S* 所有内容,运算符,货币符号什么的

inverted

相反的字符集。例如CharacterSet.whitespaces.inverted 就是没有空格

详细API见官方API

应用例子


1.自定义trim函数,去除首位空格(或者特定字符)

 //去掉首尾空格
    public func trim() -> String{
        return self.trimmingCharacters(in: CharacterSet.whitespaces)
    }

2.验证密码强度,该例子验证是否只包含数字

 // this obviously won't be
    if username.rangeOfCharacter(from: CharacterSet.alphanumerics.inverted) != nil {
            return .just(.failed(message: "Username can only contain numbers or digits"))
        }    

3.URL编码

 // url进行编码
     func urlValidate(hostUrl:String) -> URL{
        let url = URL(string: hostUrl.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlHostAllowed) ?? "")
        return url
    }  
URLUserAllowedCharacterSet      "#%/:<>?@[\]^`

URLPasswordAllowedCharacterSet  "#%/:<>?@[\]^`{|}

URLHostAllowedCharacterSet      "#%/<>?@\^`{|}

URLPathAllowedCharacterSet      "#%;<>?[\]^`{|}

URLQueryAllowedCharacterSet     "#%<>[\]^`{|}

URLFragmentAllowedCharacterSet  "#%<>[\]^`{|}

总结


总体来说这个结构体看一篇对于字符集的分类还是挺有帮助,一些问题可以使用系统字符集,可以避免来写正则。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券