- 实现正则表达式匹配的方式
- 常用的正则表达式
实现正则表达式匹配的方式
iOS中有三种方式可以实现正则表达式的匹配。
1.利用NSPredicate(谓词)匹配
例如匹配有效邮箱:
NSString *email = @"[email protected]";
// 邮箱的正则表达式
NSString *emailRegex = @"[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
// 创建并返回一个由 给定格式创建的新的字符串 形成的新谓词, 并解析结果.
NSPredicate *emailPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
// 返回布尔值, 给定对象是否与接受者的条件匹配
NSLog(@"%d", [emailPredicate evaluateWithObject:email]);
使用 NSPredicate 的字符串评估功能来进行正则表达式处理,其比较关键字为:MATCHES。谓词匹配比较灵活,但是需要了解谓词的相关知识。
2.利用rangeOfString: options: 直接查找
NSString *email = @"[email protected]";
NSRange range = [email rangeOfString:@"[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,4}" options:NSRegularExpressionSearch];
// NSNotFound, 常量, 表明一项请求无法找到或者不存在的值。
if (range.location != NSNotFound) {
// 在给定的范围内返回一个包含接受者特点的字符串对象
NSLog(@"%@", [email substringWithRange:range]);
}
options中设定NSRegularExpressionSearch表示利用正则表达式匹配,会返回第一个匹配结果的位置。
3.使用NSRegularExpression(正则表达式类)匹配
NSString *email = @"[email protected]";
NSRegularExpression *emailRegex = [NSRegularExpression regularExpressionWithPattern:@"[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,4}" options:NSRegularExpressionCaseInsensitive error:nil];
NSTextCheckingResult *result = [emailRegex firstMatchInString:email options:0 range:NSMakeRange(0, [email length])];
if (result) {
NSLog(@"%@", [email substringWithRange:result.range]);
}
使用系统的正则表达式类(NSRegularExpression)会返回匹配的多个结果。
小结:
第一种方式需要掌握NSPredicate的用法,需要查阅Apple API或者相关技术文档,如果只考虑第一个匹配的结果,第二种方式较为简单,如果需要匹配多个结果,同时匹配多次,第三种方式效率会更高。
常用的正则表达式
// 验证邮箱
+ (BOOL) verifyEmail:(NSString *)email
{
NSString *emailRegex = @"[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
NSPredicate *emailPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
return [emailPredicate evaluateWithObject:email];
}
// 验证手机号码
+ (BOOL) verifyMobilePhone:(NSString *)mobilePhone
{
NSString *phoneRegex = @"^((13[0-9])|(15[^4,\\D])|(18[0,0-9]))\\d{8}$";
NSPredicate *phonePredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", phoneRegex];
return [phonePredicate evaluateWithObject:mobilePhone];
}
// 验证用户名
+ (BOOL) verifyUserName:(NSString *)username
{
NSString *userNameRegex = @"^[A-Za-z0-9]{6,20}+$";
NSPredicate *userNamePredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",userNameRegex];
return [userNamePredicate evaluateWithObject:username];
}
// 验证密码
+ (BOOL) verifyPassword:(NSString *)password
{
NSString *passwordRegex = @"^[a-zA-Z0-9]{6,20}+$";
NSPredicate *passwordRegexPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",passwordRegex];
return [passWordPredicate evaluateWithObject:password];
}
// 验证昵称
+ (BOOL) verifyNickname:(NSString *)nickname
{
NSString *nicknameRegex = @"^[\u4e00-\u9fa5]{4,8}$";
NSPredicate *nicknamePredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",nicknameRegex];
return [nicknamePredicate evaluateWithObject:nickname];
}
// 验证身份证号
+ (BOOL) verifyIdentityCard:(NSString *)identityCard
{
BOOL flag;
if (identityCard.length <= 0) {
flag = NO;
return flag;
}
NSString *idRegex = @"^(\\d{14}|\\d{17})(\\d|[xX])$";
NSPredicate *identityCardPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",idRegex];
return [identityCardPredicate evaluateWithObject:identityCard];
}
// 验证字母和数字
+ (BOOL)verifyFigureAndLetter:(NSString *)string
{
NSString *regular = @"^[A-Za-z0-9]+$";
NSPredicate *numberAndLetterTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regular];
return [numberAndLetterTest evaluateWithObject:string];
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-12-25 23:59:44