通常我们在一些场景下会用到一个字符串是否包含某种特定字符,比如判断密码是否只包含数字,检查url是否有不规范字符,删除多余空格等操作
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 "#%<>[\]^`{|}
总体来说这个结构体看一篇对于字符集的分类还是挺有帮助,一些问题可以使用系统字符集,可以避免来写正则。