验证中文名的有效性
概述
验证中文姓名的有效性。
验证规则:
这里代码中中文名汉字字数小于两个汉字即为false
;姓名长度有所区别,正常长度最长设置为<=8个汉字,如果是中间带{•|·}的名字,则限制长度为<=15个汉字;
如果使用过程中遇到更长的,则自行修改该限制,或者联系笔者也可以。
通过正则表达式来判断。附:正则表达式30分钟入门教程。
下文中用到的正则表达式字符串为:
- 正常中文名
"^[\u4e00-\u9fa5]+$"
- 带点{•|·}的中文名
"^[\u4e00-\u9fa5]+[·•][\u4e00-\u9fa5]+$"
该正则只能简单的判断中文名的有效性,笔者对正则表达式也是了解比较浅。
如果有好的建议,希望及时联系我,万分感谢【抱拳】。
Code
源码下载地址,源码中包含各种字符串(手机号、邮箱、中文名、身份证号等)校验方法
+ (BOOL) checkEmptyString:(NSString *) string {
if (string == nil) return string == nil;
NSString *newStr = [string stringByReplacingOccurrencesOfString:@" " withString:@""];
return [newStr isEqualToString:@""];
}
/**
判断是否是有效的中文名
@param realName 名字
@return 如果是在如下规则下符合的中文名则返回`YES`,否则返回`NO`
限制规则:
1. 首先是名字要大于2个汉字,小于8个汉字
2. 如果是中间带`{•|·}`的名字,则限制长度15位(新疆人的名字有15位左右的,之前公司实名认证就遇到过),如果有更长的,请自行修改长度限制
3. 如果是不带小点的正常名字,限制长度为8位,若果觉得不适,请自行修改位数限制
*PS: `•`或`·`具体是那个点具体处理需要注意*
*/
+ (BOOL)isVaildRealName:(NSString *)realName
{
if ([MMCheckTool checkEmptyString:realName]) return NO;
NSRange range1 = [realName rangeOfString:@"·"];
NSRange range2 = [realName rangeOfString:@"•"];
if(range1.location != NSNotFound || // 中文 ·
range2.location != NSNotFound ) // 英文 •
{
//一般中间带 `•`的名字长度不会超过15位,如果有那就设高一点
if ([realName length] < 2 || [realName length] > 15)
{
return NO;
}
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"^[\u4e00-\u9fa5]+[·•][\u4e00-\u9fa5]+$" options:0 error:NULL];
NSTextCheckingResult *match = [regex firstMatchInString:realName options:0 range:NSMakeRange(0, [realName length])];
NSUInteger count = [match numberOfRanges];
return count == 1;
}
else
{
//一般正常的名字长度不会少于2位并且不超过8位,如果有那就设高一点
if ([realName length] < 2 || [realName length] > 8) {
return NO;
}
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"^[\u4e00-\u9fa5]+$" options:0 error:NULL];
NSTextCheckingResult *match = [regex firstMatchInString:realName options:0 range:NSMakeRange(0, [realName length])];
NSUInteger count = [match numberOfRanges];
return count == 1;
}
}
Test
//中文名
{
BOOL a = [MMCheckTool isVaildRealName:@"乔布斯"];
BOOL b = [MMCheckTool isVaildRealName:@"尼古拉斯•乔布斯"];
BOOL c = [MMCheckTool isVaildRealName:@"乔"];
BOOL d = [MMCheckTool isVaildRealName:@"哈哈哈•付加工费是否健康按时购房款及安防爱国卡萨"];
BOOL e = [MMCheckTool isVaildRealName:@"21345678"];
BOOL f = [MMCheckTool isVaildRealName:@"abcdefg"];
BOOL g = [MMCheckTool isVaildRealName:@"-=+_*@%#"];
BOOL h = [MMCheckTool isVaildRealName:@""];
BOOL i = [MMCheckTool isVaildRealName:nil];
NSLog(@"中文名=====》%d%d%d%d%d%d%d%d%d",a,b,c,d,e,f,g,h,i); //打印结果为 110000000
}