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 "#%<>[\]^`{|}
總結
總體來說這個結構體看一篇對於字符集的分類還是挺有幫助,一些問題可以使用系統字符集,可以避免來寫正則。
相關文章
- js與ios橋接使用WebViewJavascriptBridge簡單理解JSiOS橋接WebViewJavaScript
- 簡單理解promisePromise
- EJB簡單理解
- Restful簡單理解REST
- BFC簡單理解
- 簡單理解OAuth 2.0OAuth
- ThreadLocal的簡單理解thread
- iOS逆向之二 一個簡單的Tweak外掛原理解析iOS
- 深入理解Emoji(一) —— 字符集,字符集編碼
- iOS MQTT 簡單使用流程iOSMQQT
- Java的簡單理解(2)Java
- PHP socket 的簡單理解PHP
- 簡單理解flex佈局Flex
- MongoDB索引的簡單理解MongoDB索引
- 快速排序的簡單理解排序
- node.js簡單理解Node.js
- 對CSRF的簡單理解
- iOS13簡單適配iOS
- iOS打包簡單修改build號iOSUI
- 簡單理解DNS解析流程(一)DNS
- 關於BFC的簡單理解
- Object.keys()的簡單理解Object
- 簡單理解同步與非同步非同步
- vue cli 3的簡單理解Vue
- 簡單的理解 Object.defineProperty()Object
- 氣泡排序的簡單理解排序
- 選擇排序的簡單理解排序
- 歸併排序的簡單理解排序
- 基數排序的簡單理解排序
- 關於RabbitMQ的簡單理解MQ
- iOS 基於FMDB簡單封裝iOS封裝
- 簡單理解Paxos演算法(譯)演算法
- 三正規化-簡單理解
- Inline行內函數簡單理解inline函數
- 插值查詢的簡單理解
- iOS逆向之四 FishHook的簡單使用iOSHook
- 簡單說說iOS之WKWebView的用法iOSWebView
- ios簽名證書簡單介紹iOS