介绍
我们平常在编写一些文本的输入框时有时候需要校验、判断文本框是否为空。但是ios判断的时候一般会使用(.length)可是有时候会出现一些问题!
比如用户在输入框里面什么都没有输入直接敲空格或者有换行符的时候会出现(.length)长度不为0。而有时候我们不希望这种内容提交到服务器你该怎么办呢!
1.我么直接用字符串替换去除空格和换行
NSString* str=nil;
//1.去掉首尾空格和换行符
str = [strstringByTrimmingCharactersInSet:[NSCharacterSetwhitespaceAndNewlineCharacterSet]];
//2.去掉所有空格和换行符
str = [strstringByReplacingOccurrencesOfString:@"\r"withString:@""];
str = [strstringByReplacingOccurrencesOfString:@"\n"withString:@""];
这种方法轻松了剔除了空格和换行 可问题来了!有时候用户输入的内容里面就需要有空格和换行 你替换掉后 改变了用户的原始想输入的内容 而且我们的跟我们尽量不改变用户意愿的UE有背,那该怎么帮呢?这就需要我们用接下里的方法了
2.NSCharacterSet
NSCharacterSet其实是许多字符或者数字或者符号的组合,在网络处理的时候会用到
NSMutableCharacterSet*base = [NSMutableCharacterSet lowercaseLetterCharacterSet];//字母
NSCharacterSet*decimalDigit = [NSCharacterSet decimalDigitCharacterSet];//十进制数字
[baseformUnionWithCharacterSet:decimalDigit];//字母加十进制
NSString*string =@"ax@d5s#@sfn$5`SF$$%x^(#e{]e";
//用上面的base隔开string然后组成一个数组,然后通过componentsJoinedByString,来连接成一个字符串
NSLog(@"%@",[[stringcomponentsSeparatedByCharactersInSet:base]componentsJoinedByString:@"-"]);
[baseinvert];//非字母加十进制
NSLog(@"%@",[[stringcomponentsSeparatedByCharactersInSet:base]componentsJoinedByString:@"-"]);
答应结果:
ax@d-s#@sfn$-`SF$$%x^(#e{]e
NSCharacterSet除了上面的操作处理还有很多用途:
过滤特殊字符号
在iOS中 ��可以使用stringByTrimmingCharactersInSet函数过滤字符串中的特殊符号
首先自己定义一个NSCharacterSet, 包含需要去除的特殊符号
NSCharacterSet*set = [NSCharacterSetcharacterSetWithCharactersInString:@"@/:;()¥「」"、[]{}#%-*+=_\\|~<>$€^•'@#$%^&*()_+'\""];
由于NSString中有全角符号和半角符号, 因此有些符号要包括全角和半角的
然后调用stringByTrimmingCharactersInSet
NSString*trimmedString = [stringstringByTrimmingCharactersInSet:set];
trimmedString就是过滤后的字符串
去除空格回车
NSString *temptext = [messageTextField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
NSString *text = [temptext stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet ]];
第1行是去除2端的空格
第2行是去除回车
去掉首尾指定的字符集
NSString*strMsg=@"我爱北京天安门";
idcs= [NSCharacterSetcharacterSetWithCharactersInString:@"天门"];
NSString*strResult=[strMsgstringByTrimmingCharactersInSet:cs];
去除指定的字符集
NSString*strMsg=@"我爱北京天安门";
NSCharacterSet*cs= [NSCharacterSet characterSetWithCharactersInString:@"天门"];
NSMutableString*theString=[NSMutableStringstringWithString:strMsg];
NSString*strResult= [selfclearnIllegitCharacters:theStringandCharacterSet:cs];
//清除敏感词语,根据给定的字符串&字符集
- (NSString*)clearnIllegitCharacters:(NSMutableString*)originString andCharacterSet:(NSCharacterSet*)cs{
NSString*strResult=nil;
NSRangerange2;
do{
range2=[originStringrangeOfCharacterFromSet:csoptions:NSLiteralSearch];
if(range2.location!=NSNotFound) {
//[originString deleteCharactersInRange:range2];
[originStringreplaceCharactersInRange:range2withString:@"*"];
}
}while(range2.location!=NSNotFound);
strResult=[[NSStringalloc]initWithString:originString];
returnstrResult;
}
...
NSCharacterSet的用途还有好多我就不一一举例了 有兴趣的大家可以试一下 下面是NSCharacterSet的各个枚举类型的含义如下有时间大家可以试一下
NSCharacterSet的各个枚举类型的含义如下:
1controlCharacterSet//控制符
2whitespaceCharacterSet//空格
3whitespaceAndNewlineCharacterSet//空格换行
4decimalDigitCharacterSet//小数
5letterCharacterSet//文字
6lowercaseLetterCharacterSet//小写字母
7uppercaseLetterCharacterSet//大写字母
8nonBaseCharacterSet//非基础
9alphanumericCharacterSet//字母数字
10decomposableCharacterSet//可分解
11illegalCharacterSet//非法
12punctuationCharacterSet//标点
13capitalizedLetterCharacterSet//大写
14symbolCharacterSet//符号
15newlineCharacterSet//换行符
下面该说我们开始的问题了说到这里我不说大家应该也该知道怎么 去校验输入框纯空格和回车的问题了对就是用whitespaceAndNewlineCharacterSet
//是否是纯空格或者换行
-(BOOL)isEmpty {
if(!self) {
returntrue;
}else{
//A character set containing only the whitespace characters space (U+0020) and tab (U+0009) and the newline and nextline characters (U+000A–U+000D, U+0085).
NSCharacterSet*set = [NSCharacterSetwhitespaceAndNewlineCharacterSet];
//Returns a new string made by removing from both ends of the receiver characters contained in a given character set.
NSString*trimedString = [selfstringByTrimmingCharactersInSet:set];
if([trimedStringlength] ==0) {
returntrue;
}else{
returnfalse;
}
}}
好了说了这么多 就不啰嗦了 !不经常写也不熟悉 有问题的希望大家指出 我会改进 谢谢!