<iOS小技巧> 昵称格式判断
2024-08-23 13:43:33
一、使用方式
+ 如下代码块功能:判断字体,判断字体输入格式
NSString *firstStr = [name substringToIndex:1];
NSArray *num = @[@"0",@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9"];
if ([num containsObject:firstStr]) {
[self warnUser:@"昵称不能以数字开头"];
return;
}
if ([name containsStringAvailable:@" "]) {
[self warnUser:@"昵称不可以包含空格"];
return;
}
if ([StringUtil stringContainsEmoji:name]) {
[self warnUser:@"昵称不可以包含表情等特殊字符"];
return;
}
if ([StringUtil lengthByUTF8:name] > 24) {
[self warnUser:@"昵称过长, 汉字最多8个, 英文最多24个"];
return;
}
NSArray *num = @[@"0",@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9"];
if ([num containsObject:firstStr]) {
[self warnUser:@"昵称不能以数字开头"];
return;
}
if ([name containsStringAvailable:@" "]) {
[self warnUser:@"昵称不可以包含空格"];
return;
}
if ([StringUtil stringContainsEmoji:name]) {
[self warnUser:@"昵称不可以包含表情等特殊字符"];
return;
}
if ([StringUtil lengthByUTF8:name] > 24) {
[self warnUser:@"昵称过长, 汉字最多8个, 英文最多24个"];
return;
}
+ containsStringAvailable() 方法:用来判断是否包含此字符
- (BOOL)containsStringAvailable:(NSString *)other
{
if ([selfisIOS8AndLater]) {
return [self containsString:other];
}
else {
NSRange range = [self rangeOfString:other];
return range.length != 0;
}
}
{
if ([selfisIOS8AndLater]) {
return [self containsString:other];
}
else {
NSRange range = [self rangeOfString:other];
return range.length != 0;
}
}
- (BOOL)isIOS8AndLater
{
return [[[UIDevicecurrentDevice] systemVersion] floatValue] >= 8.0;
}
{
return [[[UIDevicecurrentDevice] systemVersion] floatValue] >= 8.0;
}
+ stringContainsEmoji() 方法:用来判断是否包含表情字符
+ (BOOL)stringContainsEmoji:(NSString *)string
{
__blockBOOL returnValue = NO;
NSRange range = NSMakeRange(0, [string length]);
[string enumerateSubstringsInRange:range options:NSStringEnumerationByComposedCharacterSequencesusingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
constunichar high = [substring characterAtIndex: 0];
// Surrogate pair (U+1D000-1F9FF)
if (0xD800 <= high && high <= 0xDBFF) {
constunichar low = [substring characterAtIndex: 1];
constint codepoint = ((high - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000;
if (0x1D000 <= codepoint && codepoint <= 0x1F9FF){
returnValue = YES;
}
}
// Not surrogate pair (U+2100-27BF)
else {
if (0x2100 <= high && high <= 0x27BF){
returnValue = YES;
}
}
}];
return returnValue;
}
{
__blockBOOL returnValue = NO;
NSRange range = NSMakeRange(0, [string length]);
[string enumerateSubstringsInRange:range options:NSStringEnumerationByComposedCharacterSequencesusingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
constunichar high = [substring characterAtIndex: 0];
// Surrogate pair (U+1D000-1F9FF)
if (0xD800 <= high && high <= 0xDBFF) {
constunichar low = [substring characterAtIndex: 1];
constint codepoint = ((high - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000;
if (0x1D000 <= codepoint && codepoint <= 0x1F9FF){
returnValue = YES;
}
}
// Not surrogate pair (U+2100-27BF)
else {
if (0x2100 <= high && high <= 0x27BF){
returnValue = YES;
}
}
}];
return returnValue;
}
+ lengthByUTF8() 方法:用来判断 UTF-8 字符长度(一个汉字 = 3个 UTF-8 字符)
+ (int)lengthByUTF8:(NSString *)str
{
int strlength = 0;
char *p = (char *)[str cStringUsingEncoding:NSUTF8StringEncoding];
for (int i=0; i<[str lengthOfBytesUsingEncoding:NSUTF8StringEncoding]; i++) {
if (*p) {
p++;
strlength++;
}
else {
p++;
}
}
return strlength;
}
{
int strlength = 0;
char *p = (char *)[str cStringUsingEncoding:NSUTF8StringEncoding];
for (int i=0; i<[str lengthOfBytesUsingEncoding:NSUTF8StringEncoding]; i++) {
if (*p) {
p++;
strlength++;
}
else {
p++;
}
}
return strlength;
}
二、我的想法
明天要出个String 的工具类出来,分别讲解一下string需要的方法,今天在判断UTF-8字符长度的时候,判断错了,把一个汉字作为两个长度处理了,导致测试测出Bug,这些小问题一定要自我验证,不能到测试那里才出现这种问题。
三、思考与行动
1.如何通过一个方法来判断汉字最多10个,英文最多5个?
2.判断是否包含表情字符的方法,我设计的合理么?是否会存在一些问题?你有没有更简洁的方法?
最新文章
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(63)-Excel导入和导出
- 浅析Java中的访问权限控制
- placeholder在不同浏览器下的表现及兼容方法
- Visio编辑数据库模型列
- 【BZOJ】【1050】【HAOI2006】旅行comf
- HTML5入门3---视频播放器
- Android:双层嵌套ViewPager并添加单击事件
- javascript 内置对象 第17节
- Tomcat启动失败闪退
- nginx---Beginner&#39;s Guide
- mysql服务设置远程连接 解决1251 client does not support ..问题
- Python3:判断三角形的类型
- 【Java每日一题】20170224
- python3编写网络爬虫18-代理池的维护
- Redis入门及主从配置
- sqlserver 当前时间减去30天
- dedecms 后台修改系统设置,但是config.cache.inc.php文件不能写入
- Django框架之Ajax和form组件
- C#实现Access导入导出Excel
- ThinkPHP 3.2.x 集成极光推送指北
热门文章
- VS2017 安装过程
- 强大的 pdf 编辑器 —— Acrobat
- UVA 1347(POJ 2677) Tour(双色欧几里德旅行商问题)
- 3DTools TrackballDecorator实现3D漫游
- 如何将任意文件固定在 Win10 的开始屏幕中
- ‘3 sigma’rule(68–95–99.7 rule)
- x:Static ;, ;StaticResource ;和DynamicResource等XAML ;扩展用法
- Centos下一个server安装的版本号mysql
- jqmobi api 详细解说
- Servlet的基础知识