今天一哥们遇到一需求,在群里求助,看到了就试了一下。废话不说,直接说需求吧。
简单说一下,昵称最少两个汉字(4个字符),最大五个汉字(10个字符)。只能输入汉字数字和英文,其他均为无效格式。增加敏感词过功能。
其中增加敏感词过滤功能,个人觉得不可以在客户端做,这个不合适,所以我没有写敏感词过滤的东西,只做了前面的
这个需要使用到正则表达式,一般基本的正则在网上一搜就可以搜到,(不需要担心自己的正则不好),下面是代码简单粗暴的代码。
//只能含有汉字英文和数字的正则
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"^[A-Za-z0-9\\u4e00-\\u9fa5]+$" options:0 error:nil];
//只能是数字和英文字符的正则
NSRegularExpression *regexNumberOrEnglishChar = [NSRegularExpression regularExpressionWithPattern:@"^[A-Za-z0-9]+$" options:0 error:nil];
//只能是汉字的正则
NSRegularExpression *regexChineseChar = [NSRegularExpression regularExpressionWithPattern:@"^[\\u4e00-\\u9fa5]+$" options:0 error:nil];
//判断是否致函汉字,数字和英文字母
NSTextCheckingResult *result2 = [regex firstMatchInString:str options:0 range:NSMakeRange(0, str.length)];
int length = 0;
if (!result2) {
NSLog(@"不符合情况,含有其他字符");
}else{
//根据一个汉字战友两个字符和一个英文字母与数字占一个字符计算长度
for (int i = 0;i < str.length ; i++) {
NSRange range = NSMakeRange(i, 1);
if ([regexNumberOrEnglishChar firstMatchInString:str options:0 range:range]) {
length += 1;
}else{
if ([regexChineseChar firstMatchInString:str options:0 range:range]) {
length += 2;
}
}
}
}
//输出
NSLog(@"含有字符%d个",length);