iOS CharacterSet(字符集)简单理解

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

CharacterSet简单描述


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

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

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

属性描述
CharacterSet.alphanumerics字母和数字的组合,包含大小写, 不包含小数点
CharacterSet.capitalizedLetters字母,首字母大写,Lt类别
CharacterSet.decimalDigits0-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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
10 数据库服务器字符集更改步骤 问题描述: 在客户端插入字符“咪咪”,从数据库中查询显示时出现乱码 处理步骤: 10.1 对数据库做全库导出,备份全库数据,以防故障发生 首先设定客户端的字符集,必须以ZHS16GBK的字符集导出,然后才能在更改失败后顺利倒入新建的库。 #setenv NLS_LANG "SIMPLIFIED CHINESE_CHINA.ZHS16GBK"; #stty -istrip -parity cs8; #setenv LANG zh 拟在/sybdata(磁盘阵列)下建立一个目录orabak,用于存放dmp文件。 #mkdir /sybdata/orabak #chown oracle:oinstall /sybdata/orabak #su – oracle #cd /sybdata/orabak %exp system/manager@hnsdh file=hnsdh_2005-8-17 log=hnsdh_exp_2005-8-17 full=y (此处命名为示例,以实施当日日期为准) 察看日志结尾,以判定导出是否成功。 #cat hnsdh_2005-8-17.dmp | od -x | head 看第二和第三个字节组成的十六进制数是多少可判断导出文件的字符集。 示例如下 #cat example.dmp | od -x | head 0000000 0303 5445 5850 4f52 543a 5630 392e 3032 。。。 0000220 646d 7000 0000 0000 0000 0000 0000 0000 十六进制的0354化为十进制为852,参造下表 NLS_CHARSET_ID NLS_CHARSET_NAME HEX_ID -------------- ------------------------------ ------------- 1 US7ASCII 1 2 WE8DEC 2 3 WE8HP 3 4 US8PC437 4 5 WE8EBCDIC37 5 6 WE8EBCDIC500 6 7 WE8EBCDIC1140 7 8 WE8EBCDIC285 8 ................... 850 ZHS16CGB231280 352 851 ZHS16MACCGB231280 353 852 ZHS16GBK 354 853 ZHS16DBCS 355 860 ZHT32EUC 35c 861 ZHT32SOPS 35d 862 ZHT16DBT 35e 863 ZHT32TRIS 35f 864 ZHT16DBCS 360 865 ZHT16BIG5 361 866 ZHT16CCDC 362 867 ZHT16MSWIN950 363 868 ZHT16HKSCS 364 870 AL24UTFFSS 366 871 UTF8 367 872 UTFE 368 即可得出这个dmp文件的字符集为ZHS16GBK。 10.2 在数据库中直接更改字符集参数 操作步骤如下: SQL> shutdown immediate SQL> startup mount SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION; SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0; SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0; SQL> ALTER DATABASE OPEN; SQL> alter session set events '10046 trace name context forever,level 12'; SQL> alter database character set INTERNAL_USE ZHS16GBK; SQL> shutdown immediate SQL> startup 察看系统字符集 SQL> SELECT * FROM NLS_DATABASE_PARAMETERS; 看NLS_CHARACTERSET的值为多少,如果为ZHS16GBK则说明改动成功。 如果执行正常,则按照下一节进行测试操作。 10.3 更改成功后的测试 测试1,在数据库服务器端下测试 %setenv NLS_LANG "SIMPLIFIED CHINESE_CHINA.ZHS16GBK"; %stty -istrip -parity cs8; %setenv LANG zh %sqlplus /nolog SQL〉conn / as sysdba SQL〉create table test_tq (a char(20)); SQL〉insert into test_tq 1>(a) 2>values ('洣洣'); SQL〉select * from test_tq; 如显示为 A -------------------- 洣洣 则成功。 测试2,Windows客户端环境下测试 运 行REGEDIT,第一步选HKEY_LOCAL_MACHINE,第二步选择SOFTWARE, 第三步选择 ORACLE, 第四步选择 NLS_LANG, 键 入 与服 务 器 端 相 同 的 字 符 集(本例为:AMERICAN_AMERICAN.US7ASCII)。 右击我的电脑,然后点击属性,“高级”页面下,点击“环境变量”,在系统变量中添加: 变量名:NLS_LANG 变量值:SIMPLIFIED CHINESE_CHINA.ZHS16GBK 运行cmd,输入echo %NLS_LANG%,查看系统变量设置时否成功 然后运行: $sqlplus system/manager@hnsdh SQL〉conn / as sysdba SQL〉create table test_tq (a char(20)); SQL〉insert into test_tq 1>(a) 2>values ('洣洣'); SQL〉select * from test_tq; 如显示为 A -------------------- 洣洣 则成功。 10.4 更改不成功时的措施 新建数据库,设定字符集为ZHS16GBK,其他参数先照搬原来的,并倒入数据。建库时所需的具体参数在重建之前要搜集。注意在配置控制文件时设定最大数据文件数。 建好数据库以后,执行以下命令即可恢复数据库 %cd /sybdata/orabak %imp system/manager@hnsdh full=y ignore=y file=hnsdh_2005-8-17 log=hnsdh_imp_2005 -8-17

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星宇大前端

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值