iOS CharacterSet(字符集)簡單理解

ZY_FlyWay發表於2019-03-25

通常我們在一些場景下會用到一個字串是否包含某種特定字元,比如判斷密碼是否只包含數字,檢查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  "#%<>[\]^`{|}

 

總結


總體來說這個結構體看一篇對於字符集的分類還是挺有幫助,一些問題可以使用系統字符集,可以避免來寫正則。

相關文章