正则判断
.h文件
1 #import <Foundation/Foundation.h> 2 3 @interface Utils : NSObject 4 #pragma 正则匹配手机号 5 + (BOOL)checkTelNumber:(NSString *) telNumber; 6 #pragma 正则匹配用户密码6-18位数字和字母组合 7 + (BOOL)checkPassword:(NSString *) password; 8 #pragma 正则匹配用户姓名,20位的中文或英文 9 + (BOOL)checkUserName : (NSString *) userName; 10 #pragma 正则匹配用户身份证号 11 + (BOOL)checkUserIdCard: (NSString *) idCard; 12 #pragma 正则匹员工号,12位的数字 13 + (BOOL)checkEmployeeNumber : (NSString *) number; 14 #pragma 正则匹配URL 15 + (BOOL)checkURL : (NSString *) url; 16 @end
.m文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 | #import "Utils.h" @implementation Utils #pragma 正则匹配手机号 + ( BOOL )checkTelNumber:( NSString *) telNumber { mobile = [mobile stringByReplacingOccurrencesOfString:@ " " withString:@ "" ]; if (mobile.length != 11) { return NO ; } else { /** * 移动号段正则表达式 */ NSString *CM_NUM = @ "^((13[4-9])|(147)|(15[0-2,7-9])|(178)|(18[2-4,7-8]))\\d{8}|(1705)\\d{7}$" ; /** * 联通号段正则表达式 */ NSString *CU_NUM = @ "^((13[0-2])|(145)|(15[5-6])|(176)|(18[5,6]))\\d{8}|(1709)\\d{7}$" ; /** * 电信号段正则表达式 */ NSString *CT_NUM = @ "^((133)|(153)|(177)|(18[0,1,9]))\\d{8}$" ; NSPredicate *pred1 = [ NSPredicate predicateWithFormat:@ "SELF MATCHES %@" , CM_NUM]; BOOL isMatch1 = [pred1 evaluateWithObject:mobile]; NSPredicate *pred2 = [ NSPredicate predicateWithFormat:@ "SELF MATCHES %@" , CU_NUM]; BOOL isMatch2 = [pred2 evaluateWithObject:mobile]; NSPredicate *pred3 = [ NSPredicate predicateWithFormat:@ "SELF MATCHES %@" , CT_NUM]; BOOL isMatch3 = [pred3 evaluateWithObject:mobile]; if (isMatch1 || isMatch2 || isMatch3) { return YES ; } else { return NO ; } } } #pragma 正则匹配用户密码6-18位数字和字母组合 + ( BOOL )checkPassword:( NSString *) password { NSString *pattern = @ "^(?![0-9]+$)(?![a-zA-Z]+$)[a-zA-Z0-9]{6,18}" ; NSPredicate *pred = [ NSPredicate predicateWithFormat:@ "SELF MATCHES %@" , pattern]; BOOL isMatch = [pred evaluateWithObject:password]; return isMatch; } #pragma 正则匹配用户姓名,20位的中文或英文 + ( BOOL )checkUserName : ( NSString *) userName { NSString *pattern = @ "^[a-zA-Z\u4E00-\u9FA5]{1,20}" ; NSPredicate *pred = [ NSPredicate predicateWithFormat:@ "SELF MATCHES %@" , pattern]; BOOL isMatch = [pred evaluateWithObject:userName]; return isMatch; } #pragma 正则匹配用户身份证号15或18位 + ( BOOL )checkUserIdCard: ( NSString *) idCard { NSString *pattern = @ "(^[0-9]{15}$)|([0-9]{17}([0-9]|X)$)" ; NSPredicate *pred = [ NSPredicate predicateWithFormat:@ "SELF MATCHES %@" , pattern]; BOOL isMatch = [pred evaluateWithObject:idCard]; return isMatch; } #pragma 正则匹员工号,12位的数字 + ( BOOL )checkEmployeeNumber : ( NSString *) number { NSString *pattern = @ "^[0-9]{12}" ; NSPredicate *pred = [ NSPredicate predicateWithFormat:@ "SELF MATCHES %@" , pattern]; BOOL isMatch = [pred evaluateWithObject:number]; return isMatch; } #pragma 正则匹配URL + ( BOOL )checkURL : ( NSString *) url { NSString *pattern = @ "^[0-9A-Za-z]{1,50}" ; NSPredicate *pred = [ NSPredicate predicateWithFormat:@ "SELF MATCHES %@" , pattern]; BOOL isMatch = [pred evaluateWithObject:url]; return isMatch; } @end |
判断用户密码是否规范
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | #pragma 正则匹配密码 +( BOOL )judgePassWordLegal:( NSString *)pass; /** * 判断用户输入的密码是否符合规范,符合规范的密码要求: 1. 长度6 ~ 10 2. 密码中必须同时包含数字和字母 ^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$ 分开来注释一下: ^ 匹配一行的开头位置 (?![0-9]+$) 预测该位置后面不全是数字 (?![a-zA-Z]+$) 预测该位置后面不全是字母 [0-9A-Za-z] {6,10} 由6-10位数字或这字母组成 $ 匹配行结尾位置 注:(?!xxxx) 是正则表达式的负向零宽断言一种形式,标识预该位置后不是xxxx字符。 */ +( BOOL )judgePassWordLegal:( NSString *)pass { BOOL result = false ; if ([pass length] >= 6 && [pass length] <= 10){ // 判断长度大于8位后再接着判断是否同时包含数字和字符 NSString * regex = @ "^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,10}$" ; NSPredicate *pred = [ NSPredicate predicateWithFormat:@ "SELF MATCHES %@" , regex]; result = [pred evaluateWithObject:pass]; } return result; } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~